使用JavaScript添加十进制数

使用JavaScript添加十进制数,javascript,validation,add,floating-point-precision,Javascript,Validation,Add,Floating Point Precision,我不想再就这一主题提出一大堆问题,但我不知道还能从哪里得到一个简洁的答案,所以我想: 我有这张表格在 为了达到这个目的,我结合了今天在网上找到的几个不同的例子,以获得我想要的整体效果 在研究过程中,我发现很多帖子都在谈论添加浮动的危害。我相信我理解为什么这通常是一个关于精度的坏主意。然而,似乎只有当两个数字的总和有几个小数位时,这才是真正的问题。(如6个或更多) 在我的代码中,我只添加小数点后两位的数字,并且使用 var n=val.toFixed(2)以确保结果有2位且只有2位小数。测试时,一

我不想再就这一主题提出一大堆问题,但我不知道还能从哪里得到一个简洁的答案,所以我想:

我有这张表格在

为了达到这个目的,我结合了今天在网上找到的几个不同的例子,以获得我想要的整体效果

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

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

我的问题有两个方面:

  • 考虑到我只需要两位小数,这是实现我期望的结果并保持精度的一种可接受的方法吗

  • 你能给我举一个例子,它展示了一种更好或更被接受的方法来做我想做的事情吗


  • 恕我直言(我欠这个社区很大的尊重)我知道“客户端验证不会取代服务器端验证”而且我只需要支持Chrome,所以如果我的代码中的任何内容在任何其他浏览器中都无法正常工作,这不是问题。

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


    然而,根据我个人的经验,我发现总是使用整数更可靠——甚至可以使用字符串运算来删除小数点,并记录我有效地将原始数字乘以了多少次方,这样我就可以在最后再次除法了。

    这听起来很合理,如果我明白你的意思,而不是做112.23+112.24=224.47,我应该做(112.23*100)+(112.24*100)=22447,然后做22447/100=224.47,并将其设置为我的“结果框”正确吗?嗯,看来你真的想去掉小数,加上两个整数,然后除以100(在我的情况下),我会处理这个问题,非常感谢你帮我指出正确的方向direction@DelightedD0D我还建议在相乘后使用
    |0
    >0
    ,以确保您有一个整数。=>
    ((112.23*100 | 0)+(112.24*100 | 0))/100
    @pvorb-hmm,我不熟悉用这种方式使用“|”。这到底在做什么?它是一个按位OR运算符。这意味着左侧整数的每一位或右侧整数的对应位(或两者)必须为1,才能使结果中的该位为1(例如,0100 | 0110=0110,带二进制整数)。因此,如果在这个操作符的右边有0,它基本上不会改变左边的整数。但是要将左边的数字应用于这个操作符,它必须是一个整数,JavaScript隐式地进行转换。