我使用 MongoDB 將值存儲為 Decimal128 并使用 PHP 和 Twig 來顯示它們。我的問題是輸出格式有千位分隔符嗎?我嘗試過使用 number_format,但這不起作用,因為該值是字符串而不是 int 或 float。我不想鍵入轉換值,因為我希望該值是精確的。例子:1000.382 = 1,000.38299.01 = 99.011900000 = 1,900,000我寫了一個函數來做到這一點。仍然想知道是否有更好的方法來做到這一點。<?php$n = '12345.001';echo fNumString($n);function fNumString ($number_string) { $ex_num = explode('.', $number_string); $whole_num_len = strlen($ex_num[0]); $formated = ''; if ($whole_num_len > 3) { for ($i = 0; $i < $whole_num_len; $i++) { $formated .= $ex_num[0][$i]; if ((($whole_num_len - ($i + 1)) % 3) == 0 && $whole_num_len != ($i + 1)) $formated .= ','; } } else $formated = $ex_num[0]; if (count($ex_num) == 2) $formated .= '.' . $ex_num[1]; return $formated;}
1 回答

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
你可以:
explode
使用,將數字字符串拆分為整數和小數部分使用反轉整數部分
strrev
,使用 , 在該整數部分中每 3 位添加一個千位分隔符
preg_replace
,使用反轉整數部分
strrev
,返回它與小數分隔符和小數部分連接
代碼:
function fNumString(string $numberString, string $decimalPoint = '.', string $thousandsSeparator = ','): string
{
[$integerPart, $decimalPart] = array_pad(explode('.', $numberString, 2), 2, null);
$integerPart = strrev(preg_replace('/\d{3}(?=\d)/', '\0' . $thousandsSeparator, strrev($integerPart)));
return $integerPart . ($decimalPart ? $decimalPoint . $decimalPart : '');
}
演示:https ://3v4l.org/m3jUC
注意:您可以省略 的最后兩個參數number_format,為了清楚起見,我喜歡保留它們(以防它們稍后由于某種原因更改默認值)。
- 1 回答
- 0 關注
- 165 瀏覽
添加回答
舉報
0/150
提交
取消