PHP BC Math 函式詳解
導語
用 PHP 計算的時候,會遇到高精度數帶來的問題。好在 PHP 提供了 BC 系統函式。下面把常用的 BC 函式封裝下,做了個簡單的示例。
程式碼示例
<?php
/**
* BC Math 函式示例
* Class BCCalculate
*/
class BCCalculate
{
private $leftNumber;// 左運算元
private $rightNumber;// 右運算元
public function __construct($leftNumber, $rightNumber)
{
$this->leftNumber = $leftNumber;
$this->rightNumber = $rightNumber;
$this->setScale();
}
/**
* 設定數字
* @param $name
* @param $value
* @return null
*/
public function __set($name, $value)
{
if (!isset($this->$name)) {
return null;
}
$this->$name = $value;
}
/**
* 獲取數字
* @param $name
* @return null
*/
public function __get($name)
{
if (isset($this->$name)) {
return $this->$name;
} else {
return null;
}
}
/**
* 執行方法
* @param $functionName
* @param string $arguments
* @return null
*/
public function __call($functionName, $arguments)
{
if (!method_exists($this, $functionName)) {
return null;
}
// 設定小數點位數需要引數,其他不需要
if (isset($arguments[0])) {
return $this->$functionName($arguments[0]);
}
return $this->$functionName();
}
/**
* 設定所有bc數學函式的預設小數點保留位數
* http://php.net/manual/zh/function.bcscale.php
* @param int $scale
*/
private function setScale($scale = 2)
{
bcscale($scale);
}
/**
* 2個任意精度數字的加法計算
* http://php.net/manual/zh/function.bcadd.php
* @return string
*/
private function add()
{
return bcadd($this->leftNumber, $this->rightNumber);
}
/**
* 2個任意精度數字的減法
* http://php.net/manual/zh/function.bcsub.php
* @return string
*/
private function sub()
{
return bcsub($this->leftNumber, $this->rightNumber);
}
/**
* 2個任意精度數字乘法計算
* http://php.net/manual/zh/function.bcmul.php
* @return string
*/
private function mul()
{
return bcmul($this->leftNumber, $this->rightNumber);
}
/**
* 2個任意精度的數字除法計算
* http://php.net/manual/zh/function.bcdiv.php
* @return string
*/
private function div()
{
return bcdiv($this->leftNumber, $this->rightNumber);
}
/**
* 比較兩個任意精度的數字
* 相等返回 0 ;左大於右返回 1 ;右大於左返回 -1
* http://php.net/manual/zh/function.bccomp.php
* @return int
*/
private function comp()
{
return bccomp($this->leftNumber, $this->rightNumber);
}
/**
* 對一個任意精度數字取模
* http://php.net/manual/zh/function.bcmod.php
* @return string
*/
private function mod()
{
return bcmod($this->leftNumber, $this->rightNumber);
}
/**
* 任意精度數字的乘方
* http://php.net/manual/zh/function.bcpow.php
* @return string
*/
private function pow()
{
return bcpow($this->leftNumber, $this->rightNumber);
}
/**
* 任意精度數字的二次方根
* http://php.net/manual/zh/function.bcsqrt.php
* @return string
*/
private function sqrt()
{
return bcsqrt($this->leftNumber);
}
}
$bc = new BCCalculate(3.45, 5.61);
var_dump($bc->leftNumber);// 獲取數字 float(3.45)
echo '<br />';
$bc->leftNumber = 24.08;
var_dump($bc->leftNumber);// 修改數字 float(24.08)
echo '<br />';
var_dump($bc->add());// 注意返回值是字串 string(5) "29.69"
echo '<br />';
$bc->setScale(3);// 修改小數點後位數
var_dump($bc->sub());// string(6) "18.470"
echo '<br />';
var_dump($bc->mul());// string(7) "135.088"
echo '<br />';
var_dump($bc->div());// string(5) "4.292"
echo '<br />';
var_dump($bc->comp());// int(1)
echo '<br />';
$bc->leftNumber = 10;
$bc->rightNumber = 4;
var_dump($bc->mod());// string(1) "2"
echo '<br />';
var_dump($bc->pow());// string(5) "10000"
echo '<br />';
$bc->leftNumber = 16;
var_dump($bc->sqrt());// string(5) "4.000"
echo '<br />';
補充
涉及到金額的時候,可以看上一篇文章。
參考資料:PHP:魔術方法、BC Math 任意精度數學。
相關文章
- Math函式函式
- PHP中debug_backtrace函式詳解PHP函式
- PHP 查詢、擷取字串函式詳解PHP字串函式
- php禁用函式設定及檢視方法詳解PHP函式
- SetupDiGetClassDevs函式詳解dev函式
- 詳解Java函式式介面Java函式
- PHP筆記:建構函式與解構函式PHP筆記函式
- 3.11 solidity 函式詳解Solid函式
- mysql常用函式詳解MySql函式
- python socket函式詳解Python函式
- fcntl函式用法詳解函式
- 建構函式詳解函式
- 箭頭函式詳解函式
- 函式引數詳解函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- php 函式PHP函式
- php函式PHP函式
- PHP 函式PHP函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- 箭頭函式this指向詳解函式
- vimscript-expand函式詳解函式
- Oracle中pivot函式詳解Oracle函式
- Python中Numpy函式詳解Python函式
- Java建構函式詳解Java函式
- TypeScript中的函式詳解TypeScript函式
- jquery.ajaxSetup()函式詳解jQuery函式
- Python正規表示式 findall函式詳解Python函式
- PHP 常用函式PHP函式
- PHP匿名函式PHP函式
- PHP常用函式PHP函式
- PHP函式大全PHP函式
- PHP函式mktimePHP函式
- PHP字串函式PHP字串函式
- JavaScript函式柯里化詳解JavaScript函式
- re模組 函式模式詳解函式模式
- 匿名函式(lambda)詳解 C++函式C++
- 詳細講解函式呼叫原理函式
- MySQL中count(*)函式原理詳解MySql函式