首页 / PHP / PHP.减去两个浮点数的结果
PHP.减去两个浮点数的结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP.减去两个浮点数的结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1477字,纯文字阅读大概需要3分钟。
内容图文
![PHP.减去两个浮点数的结果](/upload/InfoBanner/zyjiaocheng/794/ba5c9fad51754c309a5ada9a2aac67f4.jpg)
例如…
$aa = 10694994.89;
$bb = 10696193.86;
$ab = $aa - $bb;
// result is:-1198.9699999988 not the -1198,97
但在这个例子中:
$cc = 0.89;
$dd = 0.86;
$cd = $cc - $dd;
//Result is: 0.03
为什么区别于例子?缺乏精确度?
解决方法:
您的代码中的数字都不能用二进制浮点表示.它们都以某种方式被舍入.问题是为什么其中一个结果(看似)四舍五入到两位小数而不是另一个.答案在于浮点数的精度和准确度与PHP用于打印它们的精度之间的差异.
浮点数由[1,2]范围内的有效数(或尾数)表示,通过将其乘以2的幂来进行缩放. (这就是浮点“漂浮”的意思).数字的精度由有效数字中的位数确定.精度取决于这些数字中有多少实际上是正确的.有关详细信息,请参阅:How are floating point numbers are stored in memory?.
当您在PHP中回显浮点数时,它们首先使用precision配置设置转换为字符串,默认为14.(在Zend/zend_operators.c中)
要查看实际情况,您必须使用更大的精度打印数字:
$aa = 10694994.89;
$bb = 10696193.86;
$ab = $aa - $bb;
printf ("\$aa: %.20G\n", $aa);
printf ("\$bb: %.20G\n", $bb);
printf ("\$ab: %.20G\n\n", $ab);
$cc = 0.89;
$dd = 0.86;
$cd = $cc - $dd;
printf ("\$cc: %.20G\n", $cc);
printf ("\$dd: %.20G\n", $dd);
printf ("\$cd: %.20G\n", $cd);
输出:
$aa: 10694994.890000000596
$bb: 10696193.859999999404
$ab: -1198.9699999988079071
$cc: 0.89000000000000001332
$dd: 0.85999999999999998668
$cd: 0.030000000000000026645
初始数字的精度约为16到17位.当你减去$aa- $bb时,前4位数相互抵消.结果(虽然仍然具有大约16到17位的精度),现在仅精确到大约12位.当使用14位精度打印结果时,会显示较低的精度.
另一个减法($cc- $dd)仅丢失一位精度,这在以14位精度打印时无法显示.
内容总结
以上是互联网集市为您收集整理的PHP.减去两个浮点数的结果全部内容,希望文章能够帮你解决PHP.减去两个浮点数的结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。