Sprintfを使用して、小数点以下2桁以上で、先行ゼロを印刷しない方法を見つけようとしています。例えば
入力:
23
23.0
23.5
23.55
23.555
23.0000
出力:
23.00
23.00
23.50
23.55
23.555
23.00
フォーマットのヘルプをいただければ幸いです
そのような組み込みのフォーマット指定子はありません。印刷する数値の小数点以下が2つ以下であるかどうかを確認できます(小数点以下2桁に丸めて比較します)。その場合は、%。02fを使用します。数値に小数点以下の桁数が多い場合は、%g指定子を使用してください。 Rubyの例を次に示します。
def print_two_dec(number)
rounded = (number*100).to_i / 100.0
if number == rounded
printf "%.02f\n", number
else
printf "%g\n", number
end
end
[ 23, 23.0, 23.5, 23.55, 23.555 ].each do |number|
print_two_dec(number)
end
出力:
23.00
23.00
23.50
23.55
23.555
in PHP使用できます
<?php
$number = 0.56;
echo sprintf("%0.2f",$number);
PHPでは、これが私が行ったことです(この投稿に触発されました)。エレガントではないかもしれませんが...数字を文字列として出力する関数を作成しました。柔軟性を持たせたかったので、いくつかのパラメーターがあります。
PHP:
function print_num($num,$numdec,$atleast = false,$max_dec = -1)
{
$ret_norm = false;
if (!$atleast)
$ret_norm = true;
else //atleast = true
{
//Want at least $numdec decimals
//Do we have two or fewer and want to return two or fewer?
if ($num == ((int)($num*100)/100) & $numdec <= 2 )
$ret_norm = true;
else
{
//See if we have enough dec. already
$just_dec = substr((string)$num,strpos((string)$num,".") + 1);
if ($numdec >= strlen($just_dec))
$ret_norm = true;
else
{
//More decimals than at least value - make sure we don't go over max if set
if ( $max_dec >= 0 && strlen($just_dec) > $max_dec )
{
//Confine to max_dec length
$ret_norm = true;
$numdec = $max_dec; //Set for sprintf below
$num = number_format($num,$max_dec); //Round the value so doesn't just chop off
}
else if ($max_dec >= 0)
$ret_norm = false;
} //else
} //else
} //else atlest
if ($ret_norm)
return sprintf("%0.".$numdec."f",$num);
else
return sprintf("%s",$num); //print as is
} //print_num
そして、関数を呼び出す(小数点以下2桁以上、最大4桁)。
print_num($mynum,2,true,4);
数が34.1の場合、34.10になります
番号が34.12345の場合、34.1235を取得します
等.
PHPでは、 number_format
この目的のための関数もあり、区切り文字を変更することもできます。
「23.555」.toFixed(2)は私が思うことをしませんか? (Javascript)