如何使用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);
你可以试试这个
<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; }