我使用 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 关注
- 186 浏览
添加回答
举报
0/150
	提交
		取消
	