我有一个文本框,里面有一个货币字符串,然后我需要将该字符串转换为双精度值以对其执行一些操作。
"$1,100.00"
→ 1100.00
这需要在所有客户端发生。我别无选择,只能将货币字符串作为货币字符串作为输入,但需要将其强制转换/转换为 double 以允许进行一些数学运算。
我有一个文本框,里面有一个货币字符串,然后我需要将该字符串转换为双精度值以对其执行一些操作。
"$1,100.00"
→ 1100.00
这需要在所有客户端发生。我别无选择,只能将货币字符串作为货币字符串作为输入,但需要将其强制转换/转换为 double 以允许进行一些数学运算。
删除所有非点/数字:
var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));
使用正则表达式去除格式(美元和逗号),并使用 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
并允许您与其他文化一起工作。
我知道这是一个老问题,但 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'));
console.log(number.toFixed(2));
假设:
regexp 甚至可以处理诸如“1,999 美元和 99 美分”之类的事情,尽管它不是预期的功能,不应依赖它。
希望这会帮助某人。