【问题标题】:Currency Math in JavaScriptJavaScript 中的货币数学
【发布时间】:2011-02-03 02:55:32
【问题描述】:

谁能帮我解决这个算术问题的 JavaScript/jQuery 解决方案:

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

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

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

也许我需要使用parseFloat()

但我不知道怎么做 - 这让我有点过头了!

【问题讨论】:

  • @Mark:他只问了 5 个问题,拥有 36 个代表,所以显然是该网站的新手。
  • @Jared:您可以返回旧问题(单击顶部的用户名)并在适当时接受有关它们的答案。更多人可能会回答未来的问题。

标签: javascript jquery


【解决方案1】:
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,但幸运的是浮点整数运算是精确的,因此可以通过缩放来避免十进制表示错误。

您可能需要查看以下帖子以进一步阅读此主题:Is JavaScript’s math broken?

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


1道格拉斯·克罗克福德:JavaScript: The Good Parts: Appendix A - Awful Parts (page 105).

【讨论】:

  • 更新了你的模式以允许否定。
  • Caveat Emptor:如果您可以避免小数美分。在某些情况下,您不能:即汇总税收计算、非美元货币等。
【解决方案2】:

parseFloat() 不起作用,因为您的字符串以非数字开头,即美元符号。

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

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

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

此代码将您的原始字符串替换为浮点数。您也可以将它们加载到新变量中。同样,差异不必在前面加上“$”。

【讨论】:

    【解决方案3】:
    var a = "$20";
    var b = "$34";
    var c = parseFloat(a.replace(/[^0-9\.]+/g, "")) - parseFloat(b.replace(/[^0-9\.]+/g, ""));
    alert(c);
    

    【讨论】:

    • Daniel - 请问这个 gobbledegook 是什么意思? /[^0-9\.]+/g, ""
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多