phpexcel 获取99.9 得到的是99.90000000000001
答案:1 悬赏:60 手机版
解决时间 2021-04-07 09:25
- 提问者网友:美人性情
- 2021-04-07 00:31
phpexcel 获取99.9 得到的是99.90000000000001
最佳答案
- 五星知识达人网友:青灯有味
- 2021-04-07 01:08
这个不是phpexcel的问题,这个问题源于浮点数的表示方式,如果你会其它语言,你会发现其实很多其它编程语言也会有这种情况。
php官方文档也有说明:
浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。
此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。
所以,如果你想在处理浮点数的时候得到相对满意的值,可能就需要自己专门处理,如:
$v = round($v, 2);
如果有兴趣,可以看下这里(百度规则限制,你自己吧url中的空格去掉):
http:// php. net /manual/zh/language.types.float.php
http:// en. wikipedia. org/wiki/IEEE_floating_point
php官方文档也有说明:
浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。
此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。
所以,如果你想在处理浮点数的时候得到相对满意的值,可能就需要自己专门处理,如:
$v = round($v, 2);
如果有兴趣,可以看下这里(百度规则限制,你自己吧url中的空格去掉):
http:// php. net /manual/zh/language.types.float.php
http:// en. wikipedia. org/wiki/IEEE_floating_point
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯