当前位置: 首页 > 知识库问答 >
问题:

在Javascript中处理浮点精度[duplicate]

莫承运
2023-03-14
0.2 + 0.4 = 0.6000000000000001

我尝试了两件事:

>>> y = 1.23456789 
>>> x = 0.2 
>>> parseInt(Math.round(Math.floor(y/x))) * x; 
1.2000000000000002

和:

>>> y = 1.23456789 
>>> x = 0.2 
>>> y - (y % x)
1.2000000000000002

共有1个答案

壤驷文华
2023-03-14

本文摘自:如何在JavaScript中处理浮点数精度?

您有几个选择:

  • 对小数使用特殊的数据类型,如decimal.js
  • 将结果设置为固定的有效位数,如下所示:(Math.floor(y/x)*x).toFixed(2)
  • 将所有数字转换为整数
 类似资料:
  • 问题内容: 我有以下虚拟测试脚本: 这将打印结果,而仅打印结果(如果使用计算器)。据我了解,这是由于浮点乘法精度的错误。 有没有人有一个好的解决方案,这样在这种情况下我可以获得正确的结果?我知道还有类似的函数,或者四舍五入是另一种可能性,但是我真的想在不进行任何四舍五入的情况下打印出完整的数字。只是想知道你们中的一个人是否有一些不错的,优雅的解决方案。 当然,否则我将四舍五入到大约10位数字。 问

  • 问题内容: 我对在Go中精确减去2个float的方法感兴趣。 我尝试使用该 库,但无法获得准确的结果。 我使用Javascript中的big.js库解决了此问题。Go算法是否有类似的库/方法? https://play.golang.org/p/vomAr87Xln 问题答案: 包装大 导入“数学/大” func(* Float)字符串 字符串格式x类似于x.Text(’g’,10)。(必须显式调

  • 问题内容: 我需要利用来自另一个系统的数字,这些数字是Java中的128位(四精度)浮点数。 考虑到Java中没有等效类型,我想使用Java代码降低数字的精度,以便将它们存储在Java double中。这可以在c或使用汇编中相当容易地完成,但是我想纯粹在java中完成。 可以假定四精度数存储在Java中的128位字节数组中。 是否有一个很好的解决方案,仅使用java?谢谢。 问题答案: 我对这个问

  • 我编写了一个程序来演示Go中的浮点错误: 它打印: 这与用C编写的相同程序的行为相匹配(使用双代码类型) 但是,如果改用,程序就会陷入无限循环!如果将C程序修改为使用而不是,它将打印 为什么在使用时,Go程序的输出与C程序的输出不一样?

  • 问题内容: $a = ‘35’; $b = ‘-34.99’; echo ($a + $b); 结果为0.009999999999998 这是怎么回事?我想知道为什么我的程序不断报告奇怪的结果。 为什么PHP不返回预期的0.01? 问题答案: 因为浮点运算!=实数运算。对于一些浮子和,由不精确性引起的差异的说明是。这适用于使用浮点数的任何语言。 由于浮点数是具有有限精度的二进制数,因此存在有限数量