浮点乘法会产生错误的结果

问题描述:

在Javascript跨越一个奇怪的结果出来(其实蟒蛇一样)浮点乘法会产生错误的结果

var a = 80.1 
var b = 100 
var a/b = 0.8009999999999999 

var a = 80.1 
var b = 100 
var a*b = 8009.999999999999 

同样不发生80.2

想知道为什么会这样

+0

那么,你必须回答您的标题 - “漂浮” 。这就是它的工作原理。简而言之,该数字使用二进制基数以科学记数法存储。因此,并非所有的数字都可以准确地表示出来,并且由于基数的选择,十分之一不能准确表示。不同的语言以不同的方式掩盖了这个问题,有些可能会围绕结果或围绕显示的数字,有些则根本不处理。 – IllidanS4

+0

https://*.com/questions/588004/is-floating-point-math-broken 你也可以通过使用数学库得到:https://github.com/MikeMcl/decimal.js –

JavaScript使用的数学表示法在IEEE 754中,因此并不是所有数字都可以用IEEE 754表示。如果要进行分工,并得到正确的结果,那么你需要使用像十进制值的四舍五入,

var a = 80.1; 
 
var b = 100; 
 
console.log((a/b).toFixed(3));