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

javascript - JavaScript中小数加减法精度问题解决方案?

赵景曜
2024-04-23

js小数点加减法结果怎么得到正确值。

const val= 1.4 + .2 // 1.5999999999999999

这输出的结果是无限接近值,要怎么取得正确结果呐?

共有2个答案

蒋无尘
2024-04-23

楼上的是一种方法,也可以把数值扩大为整数去运算,比如说很多金额运算的时候,我们把金额单位调整为“分”,在对其进行运算就不会出现精度丢失的问题了。显示的时候再处理成“元”作为单位。

var num_a = 140var num_b = 20var num_sum = a + b // 160var num_display = num_sum / 100 // 1.6
龚凌
2024-04-23

丢失精度的原因:
JavaScript 中的所有数字,不论整数还是小数,都采用IEEE 754标准进行存储。在计算的时候都会转换成二进制,并非所有的十进制分数都能准确地转换为二进制分数,有些会产生无限循环小数。

可以使用第三方库解决这个问题:

bignumber.js

0.3 - 0.1                           // 0.19999999999999998x = new BigNumber(0.3)x.minus(0.1)                        // "0.2"x                                   // "0.3"

decimal.js

// 使用 decimal.js 进行精确计算let result = new Decimal('0.1')  .add(new Decimal('0.2'))  .toNumber(); // 转换为Number类型输出 console.log(result); // 输出:0.3

big.js

0.3 - 0.1                              // 0.19999999999999998x = new Big(0.3)x.minus(0.1)                           // "0.2"x                                      // "0.3"
 类似资料:
  • ​https://github.com/camsong/blog/issues/9​

  • 问题内容: 我的同事做了这个实验: 对于这个一年级的操作,我希望得到以下输出: 但是意外的输出是: 为什么在如此简单的操作中double会失败?而且如果double不是这项工作的数据类型,我应该使用什么? 问题答案: 在内部以分数形式存储在 二进制文件中 -例如 值-或值-不能以精确的分数形式存储在二进制中,因此不能存储精确的值,并且相减后的值也不太精确。 如果您关心精确的十进制算术,请使用。 您

  • 本文向大家介绍Java中浮点数精度问题的解决方法,包括了Java中浮点数精度问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 问题描述 在项目中用Java做浮点数计算时,发现对于4.015*100这样的计算,结果不是预料中的401.5,而是401.49999999999994。如此长的位数,对于显示来说很不友好。 问题原因:浮点数表示 查阅相关资料,发现原因是:计算机中的浮点数并不能完全精确

  • 代码如下: 在下拉框选择值后,就赋值arr的数组,然后去匹配列表的processName,在其的长度上相同的去掉, 期望下拉框选择值后,arr的数组只能选择一个,它的length

  • 问题内容: 我该如何克服Java android中双精度乘法的精度问题?请注意,我正在将字符串值转换为double值。 例如:当我将两个double值相乘时: 我得到以下结果:0.8999999999999999 我得到的一些结果是。 0.6 * 3 = 1.7999999999999998; 0.2 * 0.2 = 0.04000000000000001; 等等 除了上述结果外,我想得到以下结果

  • 问题内容: 我发现了PHP中浮点问题的一些解决方法: php.ini设置 假设是php.ini设置 那有多糟? 1.如果我只需要精确的2位数字(货币),我可以依靠此解决方案吗? 2.如果解决方案失败了,您能否为我提供一个清晰的例子? 编辑:3.哪个php.ini.precision值最适合两位数,金钱计算 请注意,我不能使用整数计算(float * 100 =美分),这样做太迟了。 我不会处理高于