私のアプリでは私はいくつかの数学を行い、結果は浮動小数点または整数になる可能性があります
最終結果を小数点以下2桁で表示したい...結果が浮動小数点数の場合
これを行うには2つのオプションがあります
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
私はそれにそのような短いバイパスはないと思います。
10進数の後に2桁以上あるかどうかを手動で確認します。
10進数の桁数が1桁以下かどうかを知る方法は? 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を使用する前に、別の10進数を追加したことも覚えておいてください。
別のオプションを見つけました。末尾のゼロを削除するには、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
この例を使用できます
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
小数点以下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);
}
私はこれが好きではありません。
<?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
はい、確認する必要があります。たとえば、ceil($number) > floor($number);
かどうかを確認します。具体的に2桁が必要な場合は、さらに手間がかかります。