大家有没有试试计算0.3/3,结果居然是0.09999999999,这是什么原因
发布于 7 年前 作者 gaolei 18353 次浏览 来自 问答

本来想做个计算器,结果计算0.3/3,结果居然是0.09999999999,不知何故    其他的计算就没问题

console.log(0.3/3)

大家打印到控制台试试

10 回复

好多语言都会有这个问题啊~~

js的浮点计算本来就不准确啊,你要这样算 0.3*10/(3*10)

var price = 0.3 / 3

var goalPrice = price.toFixed(2)

目前可以使用 toFixed 方法,来精确到几位数

计算机组成以及浮点数,了解一下。

计算机是无法准确表达浮点数的,计算机归根结底只是由0和1组成的

就拿 0.3 举个例子吧。

0.01 = 1/4 = 0.25 ,太小

0.011 =1/4 + 1/8 = 0.375 , 太大

0.0101 = 1/4 + 1/16 = 0.3125 , 逼近0.3了但还是有点大

0.01001 = 1/4 + 1/32 = 0.28125 , 又有点小了

0.010011 = 1/4+ 1/32 + 1/64 = 0.296875 很近了,还是有点小

0.0100111 = 1/4 + 1/32 + 1/64 + 1/128 = 0.3046875 大了点


这样下去会越来月接近0.3,能计算几位取决于你的计算机位数

所以你看见的0.3,在计算机里面并不是0.3,只是一个近似值。

这么说来   这个问题没法解决了?

这个不是开发工具的问题,是js的问题,你用PC浏览器去计算也是这个结果。

很好奇, 为什么要做个计算器?

我也遇到过,后来解决办法是把每个数先乘以1000,然后再运算出值再除以1000,因为小程序不支持某些JS函数,所以这样运算最基础了,也最实用,哈哈

演示小程序  做着玩得

先放大再缩小,所有语言基本都有这问题,二进制原因

回到顶部