我有一个文本框,其中将有一个货币字符串,然后我需要将该字符串转换为double来执行一些操作。

$1,100.00→1100.00

这需要发生在所有客户端。我别无选择,只能将货币字符串作为货币字符串作为输入,但需要将其强制转换/转换为double以允许一些数学操作。


当前回答

我知道这是一个老问题,但我想提供一个额外的选项。

jQuery Globalize提供了将特定于区域性的格式解析为float的能力。

https://github.com/jquery/globalize

给定字符串"$13,042.00",Globalize设置为en-US:

Globalize.culture("en-US");

你可以像这样解析float值:

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

这将给你:

13042.00

并且允许你与其他文化一起工作。

其他回答

我知道这是一个老问题,但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美分”之类的内容,尽管它不是预期的特性,也不应该依赖它。

希望这能帮助到一些人。

// "10.000.500,61 TL" price_to_number => 10000500.61

// "10000500.62" number_to_price => 10.000.500,62

JS fiddle.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;
}

这是一个简单的函数

函数getNumberFromCurrency(currency) { 返回(currency.replace数量(/,美元/ g, ")) } console.log(getNumberFromCurrency('$1,000,000.99')) // 1000000.99

我知道你已经找到了解决你的问题的方法,我只是想建议你看看以下更广泛的jQuery国际数字格式插件:

国际号码格式化程序

如此令人头痛,如此少地考虑其他文化……

下面是各位:

let floatPrice = parseFloat(price.replace(/(,|\.)([0-9]{3})/g,'$2').replace(/(,|\.)/,'.'));

就这么简单。