一则浮点数计算例子如下:
代码如下:
var_dump($a == $b);
我们将上面的变量用双精度格式打印出来:
echo 'br /';
输出结果如下:
显然今天这一节,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确.所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等.需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题.
所以要比较两个浮点数,需要将其控制在我们需要的精度范围内再行比较,所以呢使用 bcadd() 函数来对浮点数想加并进行精度转换(为字符串):
浮点数取整
在<
php
经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的:
经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的,所以呢使用 round() 函数处理一下即可:
虽然 round() 函数是按照指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的.
所有格式都是bcxxx( right_operand, $scale = null)
使用bc一类的函数,按字符串方式运算即可.
/**
*?数值非四舍五入保留两位小数
*?@author?Zjmainstay
*?@website?
*?@param?$num?数值
*?@return?保留两位小数
*/
$numStr?=?(string)$num?.?str_repeat('0',?$scale);
//匹配精度前的数值
if(preg_match('#^\d◆\.\d{0,'.$scale.'}#',?$numStr,?$match))?{
return?$match[0];
}?else?{
return?'0';
}
也得不到0的,
如果真要用php进行float计算的话,推荐BCMATCH,如:
参数:
num1 — 左操作数,字符串类型.
scale — 此可选参数用于设置结果中小数点后的小数位数.也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数.如果未设置,则默认为 0. 现在 scale 可以为 null.
返回值: 以字符串返回两个操作数求和之后的结果.
范例:
返回值: 以 string 类型返回减法之后的结果.
num1 — 左边的运算数,是一个字符串.
scale — 可选的 scale 参数被用作设置指示数字, 在使用来作比较的小数点部分.
num1 — string 类型的被除数.
scale — 现在 scale 可以为 null.
bcpow ( string $num , string $exponent , ?int $scale = null ): string
注: num 的 exponent 次方运算.
num — string 类型的底数.
scale — 此可选参数用于设置结果中小数点后的小数位数.也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数.如果未设置,则默认为 0.
返回值: 返回字符串类型的结果.
bcpowmod ( string $num , string $exponent , string $modulus , ?int $scale = null ): string
注: 先取次方然后取模.
base — 左操作数.它是一个字符串类型的参数.
exponent — string 类型的指数. 指数的正确操作数.
modulus — string 类型的 参 数. 接受表示模数的操作数.
scale — 一个整数类型参数.它说明 ( base exponent %mod ) 结果中小数点后的位数.其默认值为 0.
返回值: 该函数将结果作为字符串返回.或者,如果模数为 0 或指数为负,则返回 False.
bcscale ( int $scale ): int
设置所有 bc math 函数在未设定情况下的小数点保留位数.
bcscale ( null $scale = null ): int
注: 获取当前的小数点保留位数.
scale — 小数点保留位数.
返回值: 设置的时候,返回之前的小数点保留位数.否则就是返回当前的位数.
bcsqrt ( string $num , ?int $scale = null ): string
注: 返回 num 的二次方根.
num — string 类型的操作数 .
scale — 此可选参数用于设置结果中小数点后的小数位数.也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数.如果未设置,则默认为 0.
返回值: 以 string 类型返回二次方根的结果,如果 num 是负数则返回 null.
以上就是土嘎嘎小编为大家整理的php浮点数计算bc函数使用相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!