比如在excel中显示86.4,双击后在编辑栏里也是,而且已经设置了两位小数,但是用php excel读取出来输出是86.40000000000001
而且只有使用sprintf("%.1f", $data)才能四舍五入,用round($data,1)输入的还是很多位小数
请求指教出现这种情况的具体原因
1 回答
精慕HU
TA贡献1845条经验 获得超8个赞
浮点数的表示(IEEE 754):
- 浮点数, 以64位的长度(双精度)为例, 会采用1位符号位(E), 11指数位(Q), 52位尾数(M)表示(一共64位).
- 符号位:最高位表示数据的正负,0表示正数,1表示负数。
- 指数位:表示数据以2为底的幂,指数采用偏移码表示
- 尾数:表示数据小数点后的有效数字.
关键问题是如何用二进制来表示十进制的小数:
文字描述该过程如下:将该数字乘以2,取出整数部分作为二进制表示的第1位;然后再将小数部分乘以2,将得到的整数部分作为二进制表示的第2位;以此类推,知道小数部分为0。
特殊情况: 小数部分出现循环,无法停止,则用有限的二进制位无法准确表示一个小数,这也是在编程语言中表示小数会出现误差的原因。
- 1 回答
- 0 关注
- 1493 浏览
添加回答
举报
0/150
提交
取消