如何用逗号重新格式化数字

时间:2009-10-02 08:03:38

标签: php mysql

我有一行代码可以获取表格中的行数,然后显示计数。在这种情况下,它显示下载次数。

现在计数非常小但是当它变大(大于1000)时我想将其格式化为在正确的位置显示逗号:

1000

100000

1,000,000

或者也许是。 1.000 1.000.000

最简单的方法是什么?

4 个答案:

答案 0 :(得分:16)

您可以使用number_format()功能:

$str = number_format($number);

使用“。”而不是“,”:

$str = number_format($number, 0, ',', '.');

答案 1 :(得分:5)

您还可以在查询中使用FORMAT(X, D)

  

将数字X格式化为格式   '#,###,###。##',四舍五入到D十进制   place,并将结果作为a返回   串。如果D为0,则结果为否   小数点或小数部分。

     
    

的MySQL>选择格式(12332.123456,4);

    -> '12,332.1235'
         

的MySQL>选择格式(12332.1,4);

    -> '12,332.1000'
         

的MySQL>选择格式(12332.2,0);

    -> '12,332'
  

编辑:

我正要补充说“使用这种方法的缺点是你的代码中没有那个数字”,但显然这不再是问题,从PHP 5.3开始,多亏了parse类的NumberFormatter函数:

  

NumberFormatter :: parse numfmt_parse

     

- 解析数字

     

实施例

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

答案 2 :(得分:2)

我相信您正在寻找PHP内置number_format

答案 3 :(得分:1)

如果有人正在寻找PHP number_format函数的反向(通过这个问题的标题),这里有一个:

/**
 * @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;
}

用法示例:

var_dump(number_from_format('1,200.00', 2)); # double(1200)