当前位置:  开发笔记 > 编程语言 > 正文

如何使用jQuery或Javascript将货币字符串转换为double?

如何解决《如何使用jQuery或Javascript将货币字符串转换为double?》经验,为你挑选了6个好方法。

我有一个文本框,其中包含一个货币字符串,然后我需要将该字符串转换为double以对其执行某些操作.

"$1,100.00"1100.00

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



1> CMS..:

删除所有非点/数字:

var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));


请记住,这是与语言环境相关的,因为其他语言环境使用','表示小数(例如1.100,00€).其他一些语言环境甚至每组使用不同的标准数字位数(如3位小数).
为了处理字符串中的负数,我在要接受的字符列表中添加了一个" - ",即.replace(/ [^ 0-9 - \.] +/g,"")
看起来这只适用于有.00`尾随的地方.否则有效的货币表示形式,如"$ 1100"和"$ 1100".将减少两个数量级.
还要记住,一些会计应用程序将数字括在括号中以表示负值.例如:($ 5.00)= - $ 5.00

2> Thomas Kremm..:

accounting.js是要走的路.我在一个项目中使用它并且使用它有很好的经验.

accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
accounting.unformat("€ 1.000.000,00", ","); // 1000000

你可以在GitHub找到它


更新:该库有71个未解决的问题,并且在5个月内没有进行过编辑,因此我不信任它。https://github.com/openexchangerates/accounting.js/issues

3> 小智..:

使用正则表达式删除格式化(美元和逗号),并使用parseFloat将字符串转换为浮点数.

var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;


值得注意的是,当您添加货币时,不应该将浮动用于任何非"玩具"应用程序.你最终将得到**而不是**确切的总数.
当parseFloat("151.20"*100)给你15119.999999999998但parseFloat("151.40"*100)给你15140时,你会感到惊讶和不快.不要再使用parseFloat.使用特定的库来处理货币,例如accounting.js或此处建议的任何其他库.

4> Phill..:

我知道这是一个古老的问题但是想给出一个额外的选择.

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

并允许您与其他文化合作.



5> PaVen Nguyen..:

这个例子运行正常

var currency = "$123,456.00";
var number = Number(currency.replace(/[^0-9\.]+/g,""));
alert(number);

http://jsbin.com/ecAviVOV/2/edit



6> Vindicar..:

我知道这是一个老问题,但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美分"的内容,尽管它不是预期的功能,不应该依赖它.

希望这会对某人有所帮助.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有