給定浮點數 123213.666666,需保留兩位小數並直接截斷(不四捨五入),期望結果 123213.66。
$num = 123213.666666;
$result = floor($num * 100) / 100; // 123213.66
原理:乘 100 → 向下取整 → 除 100,利用 floor 的向下取整特性實現截斷。
| 方法 | 代碼 | 說明 |
|---|---|---|
| 字符串截取 | substr(sprintf('%.3f', $num), 0, -1) | 先格式化為 3 位小數字符串,再去掉最後一位 |
| bcmath 高精度 | bcdiv(bcmul($num, '100', 0), '100', 2) | 適合金融級精度需求,需開啟 bcmath 擴展 |
| 正則替換 | preg_replace('/(\\d+\\.\\d{2})\\d+/', '$1', $num) | 純字符串處理,性能稍弱 |
floor(0.58 * 100) 可能得到 57,建議金融計算使用 bcmath 或整數分單位存儲。floor 會向更小方向取整(-1.234 → -1.24),若需「向零截斷」請用 intval($num * 100) / 100。