高级Php数字格式

时间:2011-09-14 23:39:52

标签: php number-formatting

我想要一个PHP格式,格式化为至少2位小数,最多8位小数。你怎么能正确地做到这一点。

更新:对不起,我的问题是说我的号码是“4”。我希望它显示为“4.00”,如果我有“2.000000001”那么它显示为“2.00”或如果我有“3.2102”它将显示为“2.00”。 iPhone上有一个NSNumber格式化程序,与PHP相同。

5 个答案:

答案 0 :(得分:7)

这格式化8位小数的$ n数字,然后删除尾随零,最多6次。

$s = number_format($n, 8);
for($i=0; $i<8-2; $i++) {
    if (substr($s, -1) == '0')
        $s = substr($s, 0, -1);
}
print "Number = $s";

答案 1 :(得分:0)

使用sprintf()将数字格式化为一定数量的小数位:

$decimal_places = 4;
$format = "%.${decimal_places}f";
$formatted = sprintf($format,$number);

答案 2 :(得分:0)

检查数字格式功能:

<?php
$num = 43.43343;
$formatted = number_format(round((float) $num, 2), 2);
?>

http://php.net/manual/en/function.number-format.php

答案 3 :(得分:0)

我不明白为什么你想要以不一致的准确度显示数字。我不明白你在评论中想要描述的模式。

但是让我们假设您需要以下行为:您希望将数字表示为8位小数,如果结果中有超过2个尾随零,则需要删除多余的零。编码并不比用英语表达要困难得多。在伪代码中:

$mystring = string representation of number rounded to 8 decimal places;
while (last character of $mystring is a 0) {
    chop off last character of $mystring;
}

答案 4 :(得分:0)

使用 preg_match 只是得到零结束然后rtim

<?php 
$nn = number_format(10.10100011411100000,13);
preg_match('/[0]+$/',$nn,$number);
if(count($number)>0){
    echo rtrim($nn,$number[0]);
}

希望它会对你有所帮助。