摘要:導語用計算的時候,會遇到高精度數帶來的問題。好在提供了系統函數。下面把常用的函數封裝下,做了個簡單的示例。參考資料魔術方法任意精度數學。
導語
用 PHP 計算的時候,會遇到高精度數帶來的問題。好在 PHP 提供了 BC 系統函數。下面把常用的 BC 函數封裝下,做了個簡單的示例。
代碼示例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 "補充
"; $bc->leftNumber = 24.08; var_dump($bc->leftNumber);// 修改數字 float(24.08) echo "
"; var_dump($bc->add());// 注意返回值是字符串 string(5) "29.69" echo "
"; $bc->setScale(3);// 修改小數點后位數 var_dump($bc->sub());// string(6) "18.470" echo "
"; var_dump($bc->mul());// string(7) "135.088" echo "
"; var_dump($bc->div());// string(5) "4.292" echo "
"; var_dump($bc->comp());// int(1) echo "
"; $bc->leftNumber = 10; $bc->rightNumber = 4; var_dump($bc->mod());// string(1) "2" echo "
"; var_dump($bc->pow());// string(5) "10000" echo "
"; $bc->leftNumber = 16; var_dump($bc->sqrt());// string(5) "4.000" echo "
";
涉及到金額的時候,可以看上一篇文章。
參考資料:PHP:魔術方法、BC Math 任意精度數學。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30055.html
摘要:可選項目,一般使用隔開或隔開的鍵值對可選項目包,其它額外的標識信息和的不同這和長得也很相似,是的縮寫,譯為統一資源定位符。格式類似協議主機名具體地址可能還有參數這里有三個概念,統一資源標識符,統一資源定位符,統一資源名稱。 URI URI是Universal Resource Identifier通用資源標志符,是一個用于標識某一互聯網資源名稱的字符串。 該種標識允許用戶對任何(包括本...
摘要:類型類型重排序方法升序降序方法返回從參數指定位置開始到當前數組末尾的所有項。要注意的是,傳遞給構造函數的兩個參數都是字符串不能把正則表達式字面量傳遞給構造函數。由于構造函數的模式參數是字符串,所以在某些情況下要對字符串進行雙重轉義。 Object類型 Array類型 重排序方法: compare 升序: function compare(value1, value2){ ...
摘要:軟件工程活動開發軟件系統這一任務包括許多行為。前者要求對象之間具有特定關系,而后者是有關安全程序設計的這兩都是大型系統構建過程中的重要組成部分。第一一個概念層級結構在本節后續部分介紹,后者信息隱藏將在下一節介紹。 7.1 軟件工程活動 開發軟件系統這一任務包括許多行為。必須為系統制作業務案例,必須收集、明確和整理需求,必須設計、協調、構建、測試、集成、部署和維護系統本身。軟件工程領域研...
摘要:精確計算的函數簡介是的縮寫。函數的參數都是操作數加上一個可選的,比如,如果沒有提供,就用的缺省值。 PHP精確計算的BC函數 簡介:bc是Binary Calculator的縮寫。bc*函數的參數都是操作數加上一個可選的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scal...
閱讀 779·2021-09-30 09:46
閱讀 3790·2021-09-03 10:45
閱讀 3615·2019-08-30 14:11
閱讀 2549·2019-08-30 13:54
閱讀 2260·2019-08-30 11:00
閱讀 2355·2019-08-29 13:03
閱讀 1561·2019-08-29 11:16
閱讀 3588·2019-08-26 13:52