#### 1. PHP 中的精度計算問題 --- 當(dāng)使用 php 中的 `+-*/` 計算浮點數(shù)時, 可能會遇到一些計算結(jié)果錯誤的問題 這個其實是計算機底層二進制無法精確表示浮點數(shù)的一個 bug, 是跨域語言的, 比如 js 中的 **舍入誤差** 所以大部分語言都提供了用于精準(zhǔn)計算的類庫或函數(shù)庫, 比如 php 中的 bc 高精確度函數(shù)庫, js 中的 toFixed() 如下所示: 將計算結(jié)果浮點數(shù) 58 轉(zhuǎn)為整數(shù)后結(jié)果是 57, 而不是 58 ```php $result = 0.58 * 100; var_dump(intval($result)); // 57 ``` js 中的舍入誤差: **0.1 + 0.2** 的計算結(jié)果為 **0.30000000000000004**, 此時可以使用 `toFixed()` 函數(shù)處理, 使其返回正確的結(jié)果 ![](https://img.itqaq.com/art/content/d428479058b89c405d9d2c9e7a003948.png) #### 2. PHP 中的 bc 高精確度函數(shù)庫 --- 常用的高精度函數(shù) ```php // 高精度加法 bcadd(string $num1, string $num2, int $scale = 0); // 高精度減法 bcsub(string $num1, string $num2, int $scale = 0); // 高精度乘法 bcmul(string $num1, string $num2, int $scale = 0); // 高精度除法 bcdiv(string $num1, string $num2, int $scale = 0); // 比較兩個高精度數(shù)字 bccomp(string $num1, string $num2, int $scale = 0); ``` 特別注意: 從 PHP7 開始, 很多框架中都使用了嚴(yán)格模式(比如: TP6), 在嚴(yán)格模式下, 函數(shù)實參和形參的數(shù)據(jù)類型必須一致 bc 系列函數(shù)庫前兩個參數(shù)要求是字符串類型, 第三個參數(shù)為可選參數(shù), 用于設(shè)置結(jié)果中小數(shù)點后的小數(shù)位數(shù), 返回值為字符串 #### 3. 推薦文章 --- PHP 精度計算問題: [https://www.cnblogs.com/xiezhi/p/5688029.html](https://www.cnblogs.com/xiezhi/p/5688029.html)