web-dev-qa-db-ja.com

浮動小数点の後に最大2桁を表示... 2桁を超える浮動小数点数の浮動小数点数の場合のみ

私のアプリでは私はいくつかの数学を行い、結果は浮動小数点または整数になる可能性があります

最終結果を小数点以下2桁で表示したい...結果が浮動小数点数の場合

これを行うには2つのオプションがあります

number_format($final ,2);

そして

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

しかし問題は...私の最終結果が25のようなintの場合、私は

25.00 

または最終結果が12.3のようなものである場合

12.30

そして私はそれを望んでいない

小数点の後に2桁以上の浮動小数点数である場合にのみ、浮動小数点の後に2桁を表示するように数値をフォーマットする方法はありますか?または、番号をフォーマットする前に確認を行う必要がありますか?

13
max
<?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
27
user4035

私はそれにそのような短いバイパスはないと思います。
10進数の後に2桁以上あるかどうかを手動で確認します。

10進数の桁数が1桁以下かどうかを知る方法は? 10を掛けて整数かどうかを確認してください。ある場合は、そのまま番号を印刷します。現在は、「%。2f」を使用して印刷します。

1
rnbguy

ポイントの後に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を使用する前に、別の10進数を追加したことも覚えておいてください。

1
SmootQ

別のオプションを見つけました。末尾のゼロを削除するには、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
1
bitWorking

この例を使用できます

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
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);                                       
}
0
KRISHNA MK

私はこれが好きではありません。

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

はい、確認する必要があります。たとえば、ceil($number) > floor($number);かどうかを確認します。具体的に2桁が必要な場合は、さらに手間がかかります。

0
Ivan0x32