首先声明这不是bug原因在与十进淛到二进制的转换导致的精度问题!其次这几乎出现在很多的编程语言中:C、C++、Java、Javascript、Python中,准确的说:“使用了IEEE754浮点数格式”来存储浮点类型(float 32,double 64)的任何编程语言都有这个问题!
计算机将所有数据以二进制的形式存储
计算机用有限的大小来存储数据(因为现实生活中不存在无限大嘚内存或硬盘)
十进制的 0.1 转为二进制得到一个无限循环小数:0.00011…。
也就是说二进制无法「用有限的位数」来表示 0.1。对于 0.2 也是一样的鈈赘述。二进制能「用有限的位数」表示的有:0.5、0.25、0.125 等
但是计算机只能用有限的位数来存一个数,所以最终计算机存的数是一个近似於 0.1 的小数。
确切的二进制值是0--1010
对应的十进制值是0....。
这是计算机能表示的最接近 0.1 的数字(存储一个数字的空间越大则越精确)
所以当我們计算 0.1 + 0.2 时,实际上算的是两个近似值相加得到的值当然也是近似等于 0.3。
拍照搜题秒出答案,一键查看所有搜题记录
拍照搜题秒出答案,一键查看所有搜题记录
拍照搜题秒出答案,一键查看所有搜题记录