nodejs运算中的失精问题

nodejs运算中的失精问题

问题呈现

	 let a=0.1, b=0.2, c=0.3, d=0.4;
	 console.log(a+b)  // 0.30000000000000004
	 console.log(a-c) // -0.19999999999999998
	 sonsole.log(a-d) // -0.30000000000000004

分析问题

  • JavaScript中的浮点问题是由于浮点数的存储和计算方式引起的。JavaScript使用IEEE 754标准来表示和处理浮点数,这是一种二进制浮点数表示法。
  • 在计算机中,浮点数使用有限的二进制位数来表示,因此无法精确地表示一些十进制小数。
  • 例如,0.1在二进制中是一个无限循环的数字,无法完全准确地表示。当进行浮点数计算时,这种不精确性可能会导致一些意外的结果。
  • 例如,当两个浮点数相加时,如果它们的小数位数不同,结果可能会出现微小的舍入误差。这是因为计算机在内部使用有限的位数来表示浮点数,因此必须进行舍入以适应这种表示方式。
  • 另一个常见的问题是比较两个浮点数是否相等。由于舍入误差的存在,直接使用等号进行比较可能会导致错误的结果。通常需要使用一些特殊的技巧来比较浮点数,例如设置一个非常小的误差范围

如何解决

可以采取以下几种方法解决:

方法名具体的描述
整数运算需要计算的数转换为整数进行运算,最后再将结果转换回浮点数
使用内置的精确计算库Decimal.js 和 BigNumber.js
四舍五入使用 JavaScript 的内置函数 toFixed() 来对结果进行四舍五入。例如,可以使用 result.toFixed(2) 将结果保留两位小数。
比较浮点数当需要比较浮点数是否相等时,避免直接使用 == 运算符,而是使用一个很小的误差范围来进行比较。例如,可以使用 Math.abs(a - b) < 0.0001 来判断两个浮点数是否接近相等。
使用科学计数法表示当处理非常大或非常小的数字时,可以使用科学计数法来表示,并使用 JavaScript 的内置函数 toExponential() 来转换为科学计数法的字符串。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Billy Qin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值