我有一个文本框,其中包含一个货币字符串,然后我需要将该字符串转换为double以对其执行某些操作.
"$1,100.00"
→ 1100.00
这需要在所有客户端发生.我别无选择,只能将货币字符串作为货币字符串作为输入,但需要将其转换/转换为double以允许一些数学运算.
删除所有非点/数字:
var currency = "-$4,400.50"; 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找到它
使用正则表达式删除格式化(美元和逗号),并使用parseFloat将字符串转换为浮点数.
var currency = "$1,100.00"; currency.replace(/[$,]+/g,""); var result = parseFloat(currency) + .05;
我知道这是一个古老的问题但是想给出一个额外的选择.
jQuery Globalize提供了将文化特定格式解析为浮点数的功能.
https://github.com/jquery/globalize
给定字符串"$ 13,042.00",Globalize设置为en-US:
Globalize.culture("en-US");
您可以像这样解析浮点值:
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
我知道这是一个老问题,但CMS的答案似乎有一个小小的缺陷:只有在货币格式使用"."时它才有用.作为小数分隔符.例如,如果您需要使用俄罗斯卢布,字符串将如下所示:"1 000,00 rub."
我的解决方案远没有CMS那么优雅,但它应该可以解决问题.
var currency = "1 000,00 rub."; //it works for US-style currency strings as well var cur_re = /\D*(\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'));
假设:
货币值使用十进制表示法
字符串中没有数字不是货币值的一部分
货币值在其小数部分中包含0或2位数*
regexp甚至可以处理类似"1,999美元和99美分"的内容,尽管它不是预期的功能,不应该依赖它.
希望这会对某人有所帮助.