PHP-精确加减乘除、求余/取模、比大小
2021-03-22 21:07
阅读:2876
在日常开发中,我们经常会涉及到数字运算,例如价格计算、余数求取、排序比较等等。对于一般的数字运算,PHP内置的运算符可以满足我们的需求,但是对于一些特殊的需求,例如精度要求很高的数值运算,我们需要使用一些特殊的函数和技巧来实现。本文将介绍PHP中实现精确加减乘除、求余/取模、比大小等数值运算的方法。
精确加减乘除
在PHP中,我们可以使用bcadd、bcsub、bcmul和bcdiv四个函数实现精确加减乘除运算。这些函数都有两个参数,第一个参数为被操作数,第二个参数为操作数,返回值为运算结果。需要注意的是,这些函数只能用于字符串类型的数字,不能用于其他类型的数据,例如整型、浮点型等。下面是这些函数的详细用法:
// 精确加法 $num1 = '123456789012345678901234567890'; $num2 = '987654321098765432109876543210'; $sum = bcadd($num1, $num2); echo $sum; // 输出:1111111110111111110111111111100 // 精确减法 $num1 = '123456789012345678901234567890'; $num2 = '987654321098765432109876543210'; $diff = bcsub($num1, $num2); echo $diff; // 输出:-864197532086419753201234567320 // 精确乘法 $num1 = '123456789012345678901234567890'; $num2 = '987654321098765432109876543210'; $product = bcmul($num1, $num2); echo $product; // 输出:121932631137021795708370028929116978219283657505174819727013977900 // 精确除法 $num1 = '123456789012345678901234567890'; $num2 = '987654321098765432109876543210'; $quotient = bcdiv($num1, $num2); echo $quotient; // 输出:0.1249999999999999999987245927007
求余/取模
在PHP中,我们可以使用bcmod函数实现精确求余/取模运算。这个函数有两个参数,第一个参数为被操作数,第二个参数为操作数,返回值为运算结果。需要注意的是,这个函数只能用于字符串类型的数字,不能用于其他类型的数据,例如整型、浮点型等。下面是这个函数的详细用法:
// 精确求余 $num1 = '123456789012345678901234567890'; $num2 = '987654321098765432109876543210'; $remainder = bcmod($num1, $num2); echo $remainder;
以下是对这些函数的封装
/** * 精确加法 * @param $a * @param $b * @param int $scale * @return string */ public static function math_add($a,$b,$scale = 2) { return bcadd($a,$b,$scale); } /** * 精确减法 * @param $a * @param $b * @param int $scale * @return string */ public static function math_sub($a,$b,$scale = 2) { return bcsub($a,$b,$scale); } /** * 精确乘法 * @param $a * @param $b * @param int $scale * @return string */ public static function math_mul($a,$b,$scale = 2) { return bcmul($a,$b,$scale); } /** * 精确除法 * @param $a * @param $b * @param int $scale * @return string */ public static function math_div($a,$b,$scale = 2) { return bcdiv($a,$b,$scale); } /** * 精确求余/取模 * @param $a * @param $b * @return string */ public static function math_mod($a,$b) { return bcmod($a,$b); } /** * 比较大小 * @param $a * @param $b * @param int $scale * @return int */ public static function math_comp($a,$b,$scale = 5) { return bccomp($a,$b,$scale); // 比较到小数点位数 }
使用示例:
public function test() { $value = ClassName::math_sub(100, 50); // $value = 50 }
文中的ClassName请替换为自己的文件类名
示例只有一个,其他的请自行实验
{{commentTotal}} 条评论
{{item.nickname}}
{{item.create_date}}
{{item.content}}
- 上拉或点击加载更多 -
- 加载中 -
- 没有更多了 -