Maison  >  Article  >  développement back-end  >  intval遇到小数为什么会减1

intval遇到小数为什么会减1

WBOY
WBOYoriginal
2016-06-23 13:57:031359parcourir

$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
你在学习计算机基础知识时,没有看二进制小数的章节吗?


上课那会儿还真没怎么注意小数这部分
发现落下好多基础...
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn