skip to Main Content

How to set minimum decimal digits but not maximum decimal digits. I tried with number_format but the results were unexpected.

<?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>";

?>

Result:

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

Expected Result:

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

How do I do this?

2

Answers


  1. There’s a more advanced class called NumberFormatter which is part of the intl extension that supports both minimum and maximum, and you can just set the latter to a high number to achieve your expected results.

    $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;
    

    Output:

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

    Demo: https://3v4l.org/filso#v8.0.25

    Login or Signup to reply.
  2. Simple function for that. You can custom function for your idea: string to use for decimal point,…

    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;
    

    Results:

    1,000,000.00
    1,000,000.60
    1000000.63
    1000000.68464
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search