你可能知道但是会犯的错误,细节决定成败
你或许知道强制转换会丢失精度,你或许了解或多或少类似的细节,你或许也有遗漏的细节
1+1 = 2
3*(1/3) =1 没错 但是你给计算机试试
3*0.3333... =0.999999999 != 1
这就是细节,什么时候注意呢,得看情况了,比如是现金、利率时候就的注意了
<?php echo (int)((0.1+0.0)*10); //1 echo"<br>"; echo (int)((0.1+0.1)*10); //2 echo"<br>"; echo (int)((0.1+0.7)*10); //7 echo"<br>"; echo (0.1+0.7); //0.8 echo"<br>"; echo intval((0.1+0.7) * 10); //7 而不是8 echo"<br>"; echo intval(bcadd(0.1,0.7,8)*10); //8 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 仔细想下,你或许明白,但是我还是没明白,因为我笨,于是找到php。chm 给出一些解释 Warning 关于浮点数精度的警告 显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9。 这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3。 所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。 至于上面中的任意精度计算可参考php.chm ◾bcadd — Add two arbitrary precision numbers string bcadd ( string $left_operand , string $right_operand [, int $scale ] )
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章
如何修复KB5055612无法在Windows 10中安装?
4 周前
By DDD
<🎜>:种植花园 - 完整的突变指南
3 周前
By DDD
<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前
By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)