JavaScript中的货币数学

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

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

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

我创建了两个变量 – toalAssetstotalLiabilites 。 我想从前者中减去后者并将结果放入另一个名为netWorth变量中。

也许我需要使用parseFloat()

但我不确定如何 – 这一切都在我脑海中!

 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中,建议1将货币处理为表示分数(8512而不是85.12)的整数。 这是为了避免浮点运算的问题。 0.1 + 0.2 == 0.3在JavaScript中返回false,但幸运的是浮点中的整数运算是精确的,因此可以通过缩放来避免十进制表示错误。

您可能需要查看以下post以进一步阅读此主题: JavaScript的数学运算是否已损坏?

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


1 Douglas Crockford: JavaScript:好的部分:附录A – 可怕的部分(第105页) 。

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

您只需执行替换即可删除美元符号,并使用parseFloat获取值:

 totalAssets = parseFloat(totalAssets.replace('$', '')); totalLiabilities = parseFloat(totalLiabilities.replace('$', '')); var difference = '$' + (totalAssets - totalLiabilities); 

此代码用浮点数替换原始字符串。 您也可以将它们加载到新变量中。 同样,差异不必具有’$’前置。

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