摘要:導(dǎo)語(yǔ)用計(jì)算的時(shí)候,會(huì)遇到高精度數(shù)帶來(lái)的問(wèn)題。好在提供了系統(tǒng)函數(shù)。下面把常用的函數(shù)封裝下,做了個(gè)簡(jiǎn)單的示例。參考資料魔術(shù)方法任意精度數(shù)學(xué)。
導(dǎo)語(yǔ)
用 PHP 計(jì)算的時(shí)候,會(huì)遇到高精度數(shù)帶來(lái)的問(wèn)題。好在 PHP 提供了 BC 系統(tǒng)函數(shù)。下面把常用的 BC 函數(shù)封裝下,做了個(gè)簡(jiǎn)單的示例。
代碼示例leftNumber = $leftNumber; $this->rightNumber = $rightNumber; $this->setScale(); } /** * 設(shè)置數(shù)字 * @param $name * @param $value * @return null */ public function __set($name, $value) { if (!isset($this->$name)) { return null; } $this->$name = $value; } /** * 獲取數(shù)字 * @param $name * @return null */ public function __get($name) { if (isset($this->$name)) { return $this->$name; } else { return null; } } /** * 執(zhí)行方法 * @param $functionName * @param string $arguments * @return null */ public function __call($functionName, $arguments) { if (!method_exists($this, $functionName)) { return null; } // 設(shè)置小數(shù)點(diǎn)位數(shù)需要參數(shù),其他不需要 if (isset($arguments[0])) { return $this->$functionName($arguments[0]); } return $this->$functionName(); } /** * 設(shè)置所有bc數(shù)學(xué)函數(shù)的默認(rèn)小數(shù)點(diǎn)保留位數(shù) * http://php.net/manual/zh/function.bcscale.php * @param int $scale */ private function setScale($scale = 2) { bcscale($scale); } /** * 2個(gè)任意精度數(shù)字的加法計(jì)算 * http://php.net/manual/zh/function.bcadd.php * @return string */ private function add() { return bcadd($this->leftNumber, $this->rightNumber); } /** * 2個(gè)任意精度數(shù)字的減法 * http://php.net/manual/zh/function.bcsub.php * @return string */ private function sub() { return bcsub($this->leftNumber, $this->rightNumber); } /** * 2個(gè)任意精度數(shù)字乘法計(jì)算 * http://php.net/manual/zh/function.bcmul.php * @return string */ private function mul() { return bcmul($this->leftNumber, $this->rightNumber); } /** * 2個(gè)任意精度的數(shù)字除法計(jì)算 * http://php.net/manual/zh/function.bcdiv.php * @return string */ private function div() { return bcdiv($this->leftNumber, $this->rightNumber); } /** * 比較兩個(gè)任意精度的數(shù)字 * 相等返回 0 ;左大于右返回 1 ;右大于左返回 -1 * http://php.net/manual/zh/function.bccomp.php * @return int */ private function comp() { return bccomp($this->leftNumber, $this->rightNumber); } /** * 對(duì)一個(gè)任意精度數(shù)字取模 * http://php.net/manual/zh/function.bcmod.php * @return string */ private function mod() { return bcmod($this->leftNumber, $this->rightNumber); } /** * 任意精度數(shù)字的乘方 * http://php.net/manual/zh/function.bcpow.php * @return string */ private function pow() { return bcpow($this->leftNumber, $this->rightNumber); } /** * 任意精度數(shù)字的二次方根 * 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);// 獲取數(shù)字 float(3.45) echo "補(bǔ)充
"; $bc->leftNumber = 24.08; var_dump($bc->leftNumber);// 修改數(shù)字 float(24.08) echo "
"; var_dump($bc->add());// 注意返回值是字符串 string(5) "29.69" echo "
"; $bc->setScale(3);// 修改小數(shù)點(diǎn)后位數(shù) 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 "
";
涉及到金額的時(shí)候,可以看上一篇文章。
參考資料:PHP:魔術(shù)方法、BC Math 任意精度數(shù)學(xué)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30055.html
摘要:導(dǎo)語(yǔ)涉及到金額的代碼,一定要謹(jǐn)慎處理。所幸的是,金額一般不會(huì)有太多的小數(shù)。那么存儲(chǔ)的時(shí)候呢,一言以蔽之,以分為單位進(jìn)行存儲(chǔ)。格式化金額下面是格式化金額的實(shí)例格式化金額參考資料關(guān)于浮點(diǎn)數(shù)你應(yīng)該知道的浮點(diǎn)數(shù)的一個(gè)常見(jiàn)問(wèn)題的解答。 導(dǎo)語(yǔ) 涉及到金額的代碼,一定要謹(jǐn)慎處理。剛好最近做了相關(guān)的功能,下面大概說(shuō)一下。 存儲(chǔ) PHP 的浮點(diǎn)數(shù)是不能精確計(jì)算的,具體的可以看這篇文章。所幸的是,金額一般...
摘要:可選項(xiàng)目,一般使用隔開(kāi)或隔開(kāi)的鍵值對(duì)可選項(xiàng)目包,其它額外的標(biāo)識(shí)信息和的不同這和長(zhǎng)得也很相似,是的縮寫,譯為統(tǒng)一資源定位符。格式類似協(xié)議主機(jī)名具體地址可能還有參數(shù)這里有三個(gè)概念,統(tǒng)一資源標(biāo)識(shí)符,統(tǒng)一資源定位符,統(tǒng)一資源名稱。 URI URI是Universal Resource Identifier通用資源標(biāo)志符,是一個(gè)用于標(biāo)識(shí)某一互聯(lián)網(wǎng)資源名稱的字符串。 該種標(biāo)識(shí)允許用戶對(duì)任何(包括本...
摘要:類型類型重排序方法升序降序方法返回從參數(shù)指定位置開(kāi)始到當(dāng)前數(shù)組末尾的所有項(xiàng)。要注意的是,傳遞給構(gòu)造函數(shù)的兩個(gè)參數(shù)都是字符串不能把正則表達(dá)式字面量傳遞給構(gòu)造函數(shù)。由于構(gòu)造函數(shù)的模式參數(shù)是字符串,所以在某些情況下要對(duì)字符串進(jìn)行雙重轉(zhuǎn)義。 Object類型 Array類型 重排序方法: compare 升序: function compare(value1, value2){ ...
摘要:軟件工程活動(dòng)開(kāi)發(fā)軟件系統(tǒng)這一任務(wù)包括許多行為。前者要求對(duì)象之間具有特定關(guān)系,而后者是有關(guān)安全程序設(shè)計(jì)的這兩都是大型系統(tǒng)構(gòu)建過(guò)程中的重要組成部分。第一一個(gè)概念層級(jí)結(jié)構(gòu)在本節(jié)后續(xù)部分介紹,后者信息隱藏將在下一節(jié)介紹。 7.1 軟件工程活動(dòng) 開(kāi)發(fā)軟件系統(tǒng)這一任務(wù)包括許多行為。必須為系統(tǒng)制作業(yè)務(wù)案例,必須收集、明確和整理需求,必須設(shè)計(jì)、協(xié)調(diào)、構(gòu)建、測(cè)試、集成、部署和維護(hù)系統(tǒng)本身。軟件工程領(lǐng)域研...
摘要:精確計(jì)算的函數(shù)簡(jiǎn)介是的縮寫。函數(shù)的參數(shù)都是操作數(shù)加上一個(gè)可選的,比如,如果沒(méi)有提供,就用的缺省值。 PHP精確計(jì)算的BC函數(shù) 簡(jiǎn)介:bc是Binary Calculator的縮寫。bc*函數(shù)的參數(shù)都是操作數(shù)加上一個(gè)可選的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scal...
閱讀 770·2021-09-30 09:46
閱讀 3777·2021-09-03 10:45
閱讀 3609·2019-08-30 14:11
閱讀 2544·2019-08-30 13:54
閱讀 2255·2019-08-30 11:00
閱讀 2347·2019-08-29 13:03
閱讀 1554·2019-08-29 11:16
閱讀 3581·2019-08-26 13:52