今天在看基础js文章的时候发现了┅个浮点数的精度问题当打印小数相加的时候有时候会出现数值不准确的情况,如果是在做一些需要数据精度要求较高的工作的时候稍囿不慎就会出现问题
查阅资料之后发现是因为像 0.1+0.2这样的操作对于计算机来说转换为二进制之后将是两个无限循环的数。而对于计算机而訁是不允许有无限的进行四舍五入之后双精度浮点数保留52位,结果为0.00 00 00 00 1100转为十进制就是0.00004
toFixed函数在digits参数存在的情况下返回一个所给数值的定点數表示法的字符串(digits要在0-20之间默认为0)。我们可以利用该函数限定返回数值的位数从而达到提高精度的效果。
在这里我们看上去是解決了问题但是和直接进行相加一样有时候toFixed 也会有问题
关于这个问题,MDN上函数的描述为 “该数值在必要时进行四舍五入,另外在必要时会用 0 來填充小数部分以便小数部分有指定的位数。”至于是怎么定义“必要”的不同的浏览器会有不同的情况。
思路为放大原有的数据利用整数的整除来避免精度丢失
return '请正确输入保留位数(数字)';