`var_dump(ceil(2.2*100)/100);
var_dump(ceil(strval(2.2*100))/100);`
输出的结果分别是
float 2.21
float 2.2
为什么这两种情况的值会不同?大神求解。
`var_dump(ceil(2.2*100)/100);
var_dump(ceil(strval(2.2*100))/100);`
输出的结果分别是
float 2.21
float 2.2
为什么这两种情况的值会不同?大神求解。
从某乎上看到的答案。虽然还是不明白底层原理。
立即学习“PHP免费学习笔记(深入)”;
类似智能机器人程序,以聊天对话框的界面显示,通过输入问题、或点击交谈记录中的超链接进行查询,从而获取访客需要了解的资料等信息。系统自动保留用户访问信息及操作记录。后台有详细的设置和查询模块。适用领域:无人职守的客服系统自助问答系统智能机器人开发文档、资源管理系统……基本功能:设置对话界面的显示参数设置各类展示广告根据来访次数显示不同的欢迎词整合其他程序。
4
浮点小数
很多普通的十进制小数在二进制下并不是有限位的小数,有限的数值位并不能精确地记录数字的值
所以你以为的2.20在
echo sprintf('%10.30f', 2.20*100);
的时候
看到的会是
220.000000000000028421709430404007
可能这和ceil二关,是浮点运算的问题吧。
结合 @jsutking 的实验,很容易理解第1个的答案是 2.21,因为它是 ceil(220.000000000000028421709430404007) 的结果。
而第 2 个,估计是 strval(2.2 * 100) 的时候自动取了一个不大的精度,ceil(220.0000000000000) 算出来都是 220 啦。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号