【问题标题】:PHP number_format with only minimum decimal digitsPHP number_format 只有最少的十进制数字
【发布时间】:2022-11-11 20:25:24
【问题描述】:

如何设置最小小数位数但不设置最大小数位数。我尝试使用number_format,但结果出乎意料。

<?php

echo number_format("1000000", 2) . "<br>";
echo number_format("1000000.6", 2) . "<br>";
echo number_format("1000000.63", 2) . "<br>";
echo number_format("1000000.68464", 2) . "<br>";

?>

结果:

1,000,000.00
1,000,000.60
1,000,000.63
1,000,000.68

预期结果:

1,000,000.00
1,000,000.60
1,000,000.63
1,000,000.68464

我该怎么做呢?

【问题讨论】:

    标签: php numbers


    【解决方案1】:

    有一个更高级的类称为NumberFormatter,它是支持最小值和最大值的 intl 扩展的一部分,您只需将后者设置为较高的数字即可达到预期结果。

    $f = new NumberFormatter('en-US', NumberFormatter::DECIMAL);
    $f->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, 2);
    $f->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 999);
    echo $f->format("1000000") . PHP_EOL;
    echo $f->format("1000000.6") . PHP_EOL;
    echo $f->format("1000000.63") . PHP_EOL;
    echo $f->format("1000000.68464") . PHP_EOL;
    

    输出:

    1,000,000.00
    1,000,000.60
    1,000,000.63
    1,000,000.68464
    

    演示:https://3v4l.org/filso#v8.0.25

    【讨论】:

      【解决方案2】:

      简单的功能。您可以根据自己的想法自定义函数:用于小数点的字符串,...

      function number_format_min_precision($v, $minPrecision) {
       $curentPrecision = strlen(explode('.', $v)[1] ?? 0);
       if ($curentPrecision < $minPrecision) return number_format($v, $minPrecision);
        return $v;
      }
      echo number_format_min_precision('1000000', 2) . PHP_EOL;
      echo number_format_min_precision('1000000.6', 2) . PHP_EOL;
      echo number_format_min_precision('1000000.63', 2) . PHP_EOL;
      echo number_format_min_precision('1000000.68464', 2) . PHP_EOL;
      

      结果:

      1,000,000.00
      1,000,000.60
      1000000.63
      1000000.68464
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 2013-11-21
        • 2019-04-22
        • 2023-03-19
        • 2019-09-02
        • 2021-04-19
        • 2014-05-01
        相关资源
        最近更新 更多