bcmath 扩展

bcmath扩展为PHP提供了高精度的数学运算功能,解决了浮点数精度计算问题。介绍了bcmath的安装、bcscale设置精度以及bcadd、bcsub、bcmul、bcdiv、bccomp、bcmod、bcpow和bcsqrt等常用函数的使用示例。
摘要由CSDN通过智能技术生成

简介

bcmath 扩展提供了一套bc(Binary Calculator)数学函数,它是一个高精度运算的函数库,可以准确地对任意精度的数字进行运算。

对于十进制的浮点数,计算机底层无法准确用二进制进行存储,也就是说,计算机用二进制存储浮点数时,可能出现精度丢失的问题。当我们用常规的方式(加减乘除、幂运算、求平方根)对浮点数进行运算时,就可能出现计算结果不准确的问题。这种精度计算的问题是计算机底层的一个bug,是跨语言的。

示例1:

<?php
$f = 0.58;    
var_dump($f * 100);
var_dump(round($f * 100));
var_dump(intval($f * 100));
var_dump($f * 100==58);
var_dump(round($f * 100)==58);
var_dump(intval($f * 100)==58);

// 输出:float(58) float(58) int(57) bool(false) bool(true) bool(false)

可以发现,0.58*100的结果并不等于58,只是近似58而已。因为,浮点数0.58在计算机中无法准确存储,计算机中实际存储的值是0.5799999999999999999,它只能无限接近于0.58。

示例2:

<?php
var_dump(0.1+0.2 == 0.3);

// 输出:bool(false)

示例3:

<?php
$a = 0.1+0.2;
printf('%.18f', $a);
echo '<br/>';

$b = 0.3;
printf('%.18f', $b);
echo '<br/>';

var_dump($a==$b);

// 输出结果如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值