JavaScript中的货币数学
有人可以帮我解决这个算术问题的JavaScript / jQuery解决方案:
我需要从另一个中减去一个数字。
问题是数字有一个美元符号(因为它的钱),因此jQuery将它们视为字符串而不是数字。
我创建了两个变量 – toalAssets
和totalLiabilites
。 我想从前者中减去后者并将结果放入另一个名为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);