17

在我的应用程序中,我做了一些数学运算,结果可以是浮点数或整数

我想用小数点后两位数显示最终结果 max ...如果结果是浮点数

有两种选择可以做到这一点

number_format($final ,2);

sprintf ("%.2f", $final );

但问题是......如果我的最终结果是像25我这样的 int

25.00 

或者如果最终结果是12.3它给我的东西

12.30

我不想要那个

有没有办法格式化一个数字以在浮点数后显示 2 位数字,只有当它是一个浮点数,小数点后超过 2 位数字时?还是我应该在格式化我的号码之前做一些检查?

4

8 回答 8

30
<?php
$number = 25;
print round($number, 2);

print "\n";

$number = 25.3;
print round($number, 2);

print "\n";

$number = 25.33;
print round($number, 2);

印刷:

25
25.3
25.33
于 2013-07-21T11:06:42.440 回答
2

我找到了另一个选择。强制转换float为去除尾随零:

echo (float)sprintf("%.2f", $final);
// or
echo (float)number_format($final ,2);

但是这些函数似乎将数字四舍五入,就像round

echo sprintf("%.2f", 12.556); // 12.56
echo number_format(12.556, 2); // 12.56

因此,如果您不希望出现这种行为,请使用:

$final = 12.556;
echo (int)(($final*100))/100; // 12.55

echo (int)((12*100))/100; // 12
echo (int)((12.3*100))/100; // 12.3
echo (int)((12.34567*100))/100; // 12.34
于 2013-07-21T11:52:45.760 回答
1

我认为没有这么短的旁路。
手动检查小数点后是否有 2 位或更多位。

如何知道它的小数点后是少了一位还是零位?只需乘以 10 并检查它是否为整数。如果是,请按原样打印数字。如果现在使用 '%.2f' 来打印它。

于 2013-07-21T11:05:28.483 回答
1

如果该点后的位数超过 0,则必须添加一个 if 条件。我没有看到任何其他解决方案。

一种简单而快速的方法来做到这一点。

$final=3.40;
$decimalNbr= strlen(substr(strrchr($final, "."), 1));
$final = number_format($final,(is_float($final) ? (($decimalNbr>2) ? 2 : $decimalNbr) : 0));


echo $final;

还要记住,我在使用 number_format 之前添加了另一个十进制数字计数。

于 2013-07-21T11:12:41.273 回答
1

尝试以下功能以保持小数点后两位数不变

如果您想更改位数,请更改 AFTER_DESIMAL_DIGITS 值

function decimal_digit_maintainer($value){
    define("AFTER_DESIMAL_DIGITS ",2);
    $value_array = explode('.',$value);
    if(isset($value_array[1])){
        $value_array[1] =  str_pad($value_array[1],AFTER_DESIMAL_DIGITS,'0',STR_PAD_RIGHT);
    }
    return implode('.',$value_array);                                       
}
于 2019-05-30T06:09:59.800 回答
0

是的,你应该做一些检查。例如,检查ceil($number) > floor($number);如果您需要特别两位数,那将需要更多的努力。

于 2013-07-21T11:08:27.763 回答
0

我不喜欢这个。

<?php
function format($number) {
    return preg_replace(
        '~\.[0-9]0+$~',
        null,
        sprintf('%.2f', $number)
    );
}

echo format(23), PHP_EOL;       //23
echo format(23.3), PHP_EOL;     //23
echo format(23.33), PHP_EOL;    //23.33
于 2013-07-21T11:33:41.650 回答
0

你可以使用这个例子

function num_format($number,$precision=0)
{
    $precision = ($precision == 0 ? 1 : $precision);    
    $pow = pow(10, $precision);
    $value = (int)((trim($number)*$pow))/$pow;

    return number_format($value,$precision);
}
echo num_format(71730116.048758);
//Output
//71,730,116.04
于 2013-12-18T06:40:50.563 回答