intval遇到小数为什么会减1

WBOY
Lepaskan: 2016-06-23 13:57:03
asal
1365 orang telah melayarinya

$a = 2.3;
echo ($a*100);//输出230
echo intval($a*100);//输出229
刚开始用的时候我都凌乱了,不知道这是怎么回事
查了好多资料才找到答案,如下
我们看到的:2.3在机器中实际是这样的:2.299999999...具体为什么我也不知道
所以2.3*100在机器中实际是2.299999..*100=229.99...
然后intval作用于他,省略了小数部分,于是就成了229,而不是230
但是intval(1.0)仍然是1,原因是1.0在机器中也是1.0,而不是0.99999...
这种机制应该只会在小数点后发挥作用吧

求大神从根源解释下这个神奇的问题


回复讨论(解决方案)

printf('%.16f', 2.3); //2.2999999999999998

你在学习计算机基础知识时,没有看二进制小数的章节吗?

printf('%.16f', 2.3); //2.2999999999999998
你在学习计算机基础知识时,没有看二进制小数的章节吗?


上课那会儿还真没怎么注意小数这部分
发现落下好多基础...
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan