浮点后最多显示2位数字..仅当它是一个包含2个以上浮点数字的浮点数时


show 2 digits max after floating point ... only if it is a float number with more than 2 float digits

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

我想在小数点最大值后两位显示最终结果。。。如果结果是浮点数

这个有两种选择

number_format($final ,2);

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

但问题是。。。如果我的最终结果是像25一样的int,我最终会得到

25.00 

或者,如果最终结果是类似12.3的东西,它会给我

12.30

我不想要

有什么方法可以格式化一个数字,使其在浮点后显示2位数字吗?只有当它是一个小数点后有2位以上的浮点数字时?或者我应该在格式化我的号码之前做一些检查吗?

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

我找到了另一个选项。强制转换为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

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

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

如果点后的数字超过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之前,我添加了另一个十进制数字计数。

尝试以下函数以保持小数点后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);                                       
}

是的,您应该做一些检查。例如,检查是否为ceil($number) > floor($number);如果您只需要两个数字,那将需要付出更多的努力。

我不喜欢这样。

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

您可以使用以下示例

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