我有一个文本框,其中将有一个货币字符串,然后我需要将该字符串转换为double来执行一些操作。
$1,100.00→1100.00
这需要发生在所有客户端。我别无选择,只能将货币字符串作为货币字符串作为输入,但需要将其强制转换/转换为double以允许一些数学操作。
我有一个文本框,其中将有一个货币字符串,然后我需要将该字符串转换为double来执行一些操作。
$1,100.00→1100.00
这需要发生在所有客户端。我别无选择,只能将货币字符串作为货币字符串作为输入,但需要将其强制转换/转换为double以允许一些数学操作。
当前回答
我知道这是一个老问题,但CMS的答案似乎有一个小小的缺陷:它只适用于货币格式使用“。”作为小数分隔符的情况。 例如,如果你需要使用俄罗斯卢布,字符串将看起来像这样: “1 000,00搓。”
我的解决方案远不如CMS的优雅,但它应该能达到目的。
Var货币=“1 000,00搓。”;//它也适用于美式货币字符串 var cur_re = / \ D * (\ D + | \ D。* ? \ D) (?: \ D + (\ D {2})) ? \ D * $ /; Var部分= cur_re.exec(货币); var = parseFloat数量(部分[1].replace (/ \ D /,'')+'.'+( 部分[2]?部分[2]:“00”)); console.log (number.toFixed (2));
假设:
货币值采用十进制记数 字符串中没有不是货币值一部分的数字 货币值在其小数部分*中包含0或2位数字
regexp甚至可以处理“1,999美元和99美分”之类的内容,尽管它不是预期的特性,也不应该依赖它。
希望这能帮助到一些人。
其他回答
$ 150.00
Fr. 150.00
€ 689.00
我已经测试了以上三个货币符号,你也可以做其他的。
var price = Fr. 150.00;
var priceFloat = price.replace(/[^\d\.]/g, '');
以上正则表达式将删除所有不是数字或句点的内容。所以你可以得到没有货币符号的字符串,但在“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);
}
您应该能够使用普通JS处理这个问题。国际化API是JS核心的一部分:ECMAScript国际化API https://www.w3.org/International/wiki/JavaScriptInternationalization
这个答案对我很有用:如何将数字格式化为货币字符串
使用正则表达式删除格式(美元和逗号),并使用parseFloat将字符串转换为浮点数。
var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;
如此令人头痛,如此少地考虑其他文化……
下面是各位:
let floatPrice = parseFloat(price.replace(/(,|\.)([0-9]{3})/g,'$2').replace(/(,|\.)/,'.'));
就这么简单。
对于使用Quethzel Diaz提到的“,”分隔符的货币
货币是巴西。
var currency_br = "R$ 1.343,45";
currency_br = currency_br.replace('.', "").replace(',', '.');
var number_formated = Number(currency_br.replace(/[^0-9.-]+/g,""));