【问题标题】:adding decimal numbers with JavaScript用 JavaScript 添加十进制数
【发布时间】:2013-02-15 06:23:19
【问题描述】:

我讨厌添加关于这个主题的一连串问题,但我不知道在哪里可以找到简洁的答案,所以这里是:

我有这个表格 jsFiddle

我通过结合我今天在网上找到的几个不同示例来达到我想要的整体效果。

在研究过程中,我发现很多帖子都在谈论添加浮点数的危害。我相信我理解为什么这通常是一个关于精度的坏主意的概念。但是,这似乎只是当两个数字的总和带有几个小数位时才真正成为问题。 (比如 6 个或更多)

在我的代码中我只会添加有 2 位小数的数字,我会使用 var n=val.toFixed(2); 确保结果有 2 位且只有 2 位小数。当测试一切似乎都很好。

我的问题有两个:

  1. 这是一种可接受的方式来实现我想要的结果并保持精度鉴于我只需要 2 位小数

  2. 您能否指出一个示例,它展示了一种更好或更容易接受的方式来做我想做的事?

恕我直言(我非常感谢这个社区)我知道“客户端验证不会取代服务器端验证”并且我只需要支持 Chrome 因此,如果我的代码中的任何内容在任何其他浏览器中都无法按预期工作,那也不是问题。

【问题讨论】:

    标签: javascript validation add floating-point-precision


    【解决方案1】:

    一般来说,是的。浮点数通常可以提供 15 位有效数字的精度,因此只保留 2 位几乎总是可行的。

    然而,根据我的个人经验,我发现总是以整数工作更可靠——甚至使用字符串运算来删除小数点并跟踪多少次幂十个我有效地乘以原始数字,所以我可以在最后再次划分。

    【讨论】:

    • 这听起来很合理,所以如果我理解你的意思而不是做 112.23 + 112.24 = 224.47 我应该做 (112.23 * 100) + (112.24 * 100) = 22447 然后做 22447 / 100 = 224.47并将其设置为我的“结果框”正确吗?
    • 嗯,看来你真的只是想删除小数,添加两个整数,然后除以 100(在我的情况下)我会努力解决这个问题,非常感谢你的帮助指出我正确的方向
    • @DelightedD0D 我还建议在相乘后使用| 0>> 0 以确保您有一个整数。 => ((112.23 * 100 | 0) + (112.24 * 100 | 0)) / 100
    • @pvorb 嗯,我不熟悉使用“|”这样。这到底是做什么的?
    • 它是一个按位或运算符。这意味着左侧整数的每一位或右侧整数的相应位(或两者)必须为 1 才能使结果中的该位为 1(例如 0100 | 0110 = 0110 与二进制整数)。所以如果你在这个运算符的右边有0,它基本上不会改变左边的整数。但是要将左侧的数字应用于此运算符,它必须是整数,并且 JavaScript 会隐式执行该转换。
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2021-06-03
    • 2018-09-02
    • 2016-01-05
    相关资源
    最近更新 更多