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