在浮点数后最多显示2位数...仅当它是一个浮点数超过2个浮点数时

时间:2013-07-21 11:01:40

标签: php math floating-point

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

我希望在小数点最大值后显示两位数的最终结果...如果结果是浮点数

有两个选项可以做到这一点

number_format($final ,2);

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

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

25.00 

或者如果最终结果是像12.3这样的东西它给了我

12.30

我不想要那个

有没有办法格式化一个数字,以便在浮点数后显示2位数,如果它是小数点后超过2位数的浮点数?或者我应该在格式化我的号码之前进行一些检查吗?

8 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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之前我添加了另一个十进制数字。

答案 3 :(得分:0)

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

答案 4 :(得分: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

答案 5 :(得分:0)

我找到了另一种选择。转换为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

答案 6 :(得分: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

答案 7 :(得分:0)

尝试以下功能,以保持小数点后2位为常数

如果要更改位数,请更改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);                                       
}