如何使用jQuery或Javascript将货币string转换为double?

我有一个文本框,将有一个货币string,然后我需要将该string转换为一个双重执行一些操作。

“$ 1,100.00” – > 1100.00

这需要发生在所有客户端。 我别无select,只能将货币string作为货币string作为input,但需要将其转换为双精度值以允许进行一些math运算。

删除所有非点/数字:

var currency = "$1,100.00"; var number = Number(currency.replace(/[^0-9\.-]+/g,"")); 

accounting.js是要走的路。 我在一个项目中使用它,并有非常好的使用经验。

 accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99 accounting.unformat("€ 1.000.000,00", ","); // 1000000 

你可以在GitHub上find它

使用正则expression式去除格式化(美元和逗号),并使用parseFloat将string转换为浮点数。

 var currency = "$1,100.00"; currency.replace(/[$,]+/g,""); var result = parseFloat(currency) + .05; 

我知道这是一个古老的问题,但想给一个额外的select。

jQuery Globalize提供了将文化特定格式parsing为float的能力。

https://github.com/jquery/globalize

给定一个string“$ 13,042.00”,Globalize设置为en-US:

 Globalize.culture("en-US"); 

你可以像这样parsingfloat值:

 var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c")); 

这会给你:

 13042.00 

并允许你与其他文化合作。

这个例子运行正常

 var currency = "$123,456.00"; var number = Number(currency.replace(/[^0-9\.]+/g,"")); alert(number); 

http://jsbin.com/ecAviVOV/2/edit

你可以试试这个

 <script type="text/javascript"> var str="$1,112.12"; str = str.replace(",",""); str = str.replace("$",""); document.write(parseFloat(str)); </script> 

我知道你已经find了你的问题的解决scheme,我只是想build议,也许你看看以下更广泛的国际数字格式的jQuery插件:

国际号码格式器

我知道这是一个老问题,但CMS的答案似乎有一个小小的缺陷:它只适用于货币格式使用“。 作为小数分隔符。 例如,如果您需要使用俄罗斯卢布,string将如下所示:“1000,00摩擦”。

我的解决scheme不如CMS的优雅,但它应该做的伎俩。

 var currency = "1 000,00 rub."; //it works for US-style currency strings as well var cur_re = /\D*(\d.*?\d)(?:\D+(\d{2}))?\D*$/; var parts = cur_re.exec(currency); var number = parseFloat(parts[1].replace(/\D/,'')+'.'+(parts[2]?parts[2]:'00')); 

假设:

  • 货币值使用十进制表示法
  • string中没有数字不是货币值的一部分
  • 货币值在其小数部分包含0或2个数字*

正则expression式甚至可以处理“1999美元和99美分”之类的东西,虽然它不是一个预期的function,不应该依赖。

希望这会帮助别人。

 jQuery.preferCulture("en-IN"); var price = jQuery.format(39.00, "c"); 

输出是:Rs。 39.00

 use jquery.glob.js, jQuery.glob.all.js 

//“10.000.500,61 TL”price_to_number => 10000500.61

//“10000500.62”number_to_price => 10.000.500,62

JS FIDDLE: https ://jsfiddle.net/Limitlessisa/oxhgd32c/

 var price="10.000.500,61 TL"; document.getElementById("demo1").innerHTML = price_to_number(price); var numberPrice="10000500.62"; document.getElementById("demo2").innerHTML = number_to_price(numberPrice); function price_to_number(v){ if(!v){return 0;} v=v.split('.').join(''); v=v.split(',').join('.'); return Number(v.replace(/[^0-9.]/g, "")); } function number_to_price(v){ if(v==0){return '0,00';} v=parseFloat(v); v=v.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); v=v.split('.').join('*').split(',').join('.').split('*').join(','); return v; } 
  $ 150.00 Fr. 150.00 € 689.00 

我已经testing了以上三种货币符号。你也可以为别人做。

  var price = Fr. 150.00; var priceFloat = price.replace(/[^\d\.]/g, ''); 

上面的正则expression式将删除所有不是一个数字或一个句点。所以你可以得到没有货币符号的string,但如果你输出控制台,“Fr. 150.00”的情况下,你会得到价格为

  console.log('priceFloat : '+priceFloat); output will be like priceFloat : .150.00 

这是错误的,所以你检查“。”的索引。 然后拆分,得到正确的结果。

  if (priceFloat.indexOf('.') == 0) { priceFloat = parseFloat(priceFloat.split('.')[1]); }else{ priceFloat = parseFloat(priceFloat); } 

这是我的function。 适用于所有货币

 function toFloat(num) { dotPos = num.indexOf('.'); commaPos = num.indexOf(','); if (dotPos < 0) dotPos = 0; if (commaPos < 0) commaPos = 0; if ((dotPos > commaPos) && dotPos) sep = dotPos; else { if ((commaPos > dotPos) && commaPos) sep = commaPos; else sep = false; } if (sep == false) return parseFloat(num.replace(/[^\d]/g, "")); return parseFloat( num.substr(0, sep).replace(/[^\d]/g, "") + '.' + num.substr(sep+1, num.length).replace(/[^0-9]/, "") ); } 

用法: toFloat("$1,100.00")toFloat("1,100.00$")

 function NumberConvertToDecimal (number) { if (number == 0) { return '0.00'; } number = parseFloat(number); number = number.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1"); number = number.split('.').join('*').split('*').join('.'); return number; }