JavaScript中的货币数学计算

17

有没有人可以帮我解决这个算术问题的JavaScript/jQuery解决方案:

我需要从一个数字中减去另一个数字。

问题是这些数字有一个美元符号(因为这是钱),因此jQuery将它们视为字符串而不是数字。

我创建了两个变量 - totalAssetstotalLiabilites。我想把后者从前者中减去,并把结果放到另一个名为netWorth的变量中。

也许我需要使用 parseFloat()

但我不确定怎么做 - 这对我来说有点难度!


@Mark:他只提出了5个问题,而且只有36个声望值,显然是这个网站的新手。 - DisgruntledGoat
3
@Jared:如果适当的话,你可以返回到你以前的问题(点击页面顶部的用户名),并接受那些回答。这样更多的人将会回答你未来的问题。 - DisgruntledGoat
3个回答

32
var totalLiabilites = '$52.34';
var toalAssets      = '$85.12';
var pattern         = /[^0-9.-]+/g;

var result = parseFloat(toalAssets.replace(pattern, '')) -
             parseFloat(totalLiabilites.replace(pattern, ''));

// result: 32.78

注意:在JavaScript中,建议使用表示美分数量的整数(8512而不是85.12)来处理货币,以避免浮点算术问题。在JavaScript中,0.1 + 0.2 == 0.3返回false,但幸运的是,浮点数中的整数算术是精确的,因此可以通过缩放来避免十进制表示误差。

您可能想查看以下文章以了解更多信息:JavaScript的数学是否有问题?

当值呈现到浏览器时,您始终可以应用货币符号格式。


1Douglas Crockford: JavaScript优良部分:附录A - 糟糕的部分(第105页)


更新您的模式以允许负数。 - Peter Bailey
购物需谨慎:如果可以避免使用分数美分,请尽量避免。在某些情况下,您无法避免使用,例如聚合税计算、非美元货币等。 - Alan

6

parseFloat()无法工作,因为你的字符串以非数字符号——美元符号开头。

你可以简单地进行替换,删除美元符号,再使用parseFloat获取值:

totalAssets = parseFloat(totalAssets.replace('$', ''));
totalLiabilities = parseFloat(totalLiabilities.replace('$', ''));

var difference = '$' + (totalAssets - totalLiabilities);

这段代码将原始字符串替换为浮点数。你也可以将它们加载到新变量中。同样,difference 不需要在前面添加 '$'。


1
var a = "$20";
var b = "$34";
var c = parseFloat(a.replace(/[^0-9\.]+/g, "")) - parseFloat(b.replace(/[^0-9\.]+/g, ""));
alert(c);

丹尼尔,请问这一堆意思是什么?/[^0-9.]+/g, "" - swisstony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接