how to reformat a number with commas

前端 未结 4 1242
忘掉有多难
忘掉有多难 2020-12-20 02:36

I have a line of code that get a count of rows in my table and then display the count. In this case it display the number of downloads.

Right now the count is very s

相关标签:
4条回答
  • 2020-12-20 02:46

    You can use the number_format() function:

    $str = number_format($number);
    

    To use "." instead of ",":

    $str = number_format($number, 0, ',', '.');
    
    0 讨论(0)
  • 2020-12-20 02:50

    I believe you are looking for the PHP built-in number_format.

    0 讨论(0)
  • 2020-12-20 02:58

    If somebody is looking for the reverse of PHP's number_format function (by the title of this question), here is one:

    /**
     * @param string $string
     * @param int $decimals
     * @param string $dec_point
     * @param string $thousands_sep
     *
     * @throws InvalidArgumentException
     * @return float
     */
    function number_from_format($string, $decimals = 0, $dec_point = '.', $thousands_sep = ',') {
        $buffer = $string = (string) $string;
        $buffer = strtr($buffer, array($thousands_sep => '', $dec_point => '.'));
        $float = (float) $buffer;
        $test = number_format($float, $decimals, $dec_point, $thousands_sep);
        if ($test !== $string) {
            throw new InvalidArgumentException(sprintf('Unable to parse float from "%s" as number "%s".', $string, $test));
        }
        return $float;
    }
    

    Usage Example:

    var_dump(number_from_format('1,200.00', 2)); # double(1200)
    
    0 讨论(0)
  • 2020-12-20 03:07

    You can also use FORMAT(X, D) in your query:

    Formats the number X to a format like '#,###,###.##', rounded to D decimal places, and returns the result as a string. If D is 0, the result has no decimal point or fractional part.

    mysql> SELECT FORMAT(12332.123456, 4);

        -> '12,332.1235'
    

    mysql> SELECT FORMAT(12332.1,4);

        -> '12,332.1000'
    

    mysql> SELECT FORMAT(12332.2,0);

        -> '12,332'
    

    Edit:

    I was about to add that "the downside of using this method is that you cannot that number in your code", but apparently this is not a problem anymore, starting from PHP 5.3, thanks to the parse function of NumberFormatter class:

    NumberFormatter::parse numfmt_parse

    — Parse a number

    Example

    <?php
    $fmt = new NumberFormatter( 'de_DE', NumberFormatter::DECIMAL );
    $num = "1.234.567,891";
    echo $fmt->parse($num)."\n";
    echo $fmt->parse($num, NumberFormatter::TYPE_INT32)."\n";
    ?>
    
    0 讨论(0)
提交回复
热议问题