简单谈谈php浮点数精确运算,php浮点数_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了简单谈谈php浮点数精确运算,php浮点数_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1936字,纯文字阅读大概需要3分钟。
内容图文
![简单谈谈php浮点数精确运算,php浮点数_PHP教程](/upload/InfoBanner/zyjiaocheng/191/c9ce23a005144e1e93a91ddd803f6425.jpg)
简单谈谈php浮点数精确运算,php浮点数
bc是Binary Calculator的缩写。bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scale]),如果scale没有提供,就用bcscale的缺省值。这里大数直接用一个由0-9组成的string表示,计算结果返回的也是一个 string。
bcadd — 将两个高精度数字相加
bccomp — 比较两个高精度数字,返回-1, 0, 1
bcdiv — 将两个高精度数字相除
bcmod — 求高精度数字余数
bcmul — 将两个高精度数字相乘
bcpow — 求高精度数字乘方
bcpowmod — 求高精度数字乘方求模,数论里非常常用
bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”
bcsqrt — 求高精度数字平方根
bcsub — 将两个高精度数字相减
首先看一段代码:
<?php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);
打印出来的值居然为 boolean false
这是为啥?PHP手册对于浮点数有以下警告信息:
Warning
浮点数精度
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。
这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数
那么上面的算式我们应该改写为
<?php $a = 0.1; $b = 0.7; var_dump(bcadd($a,$b,2) == 0.8);
这样就能解决浮点数的计算问题了
您可能感兴趣的文章:
- PHP数据类型之整数类型、浮点数的介绍
- php的sprintf函数的用法 控制浮点数格式
- PHP中浮点数计算比较及取整不准确的解决方法
- php判断两个浮点数是否相等的方法
- PHP浮点数精度问题汇总
- 你应该知道PHP浮点数知识
- PHP中两个float(浮点数)比较实例分析
- PHP浮点数的一个常见问题
http://www.bkjia.com/PHPjc/1108613.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1108613.htmlTechArticle简单谈谈php浮点数精确运算,php浮点数 bc是Binary Calculator的缩写。bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string...
内容总结
以上是互联网集市为您收集整理的简单谈谈php浮点数精确运算,php浮点数_PHP教程全部内容,希望文章能够帮你解决简单谈谈php浮点数精确运算,php浮点数_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。