PHP文字列を小数点以下2桁に丸める正しい方法は何ですか?
$number = "520"; // It's a string from a DB
$formatted_number = round_to_2dp($number);
echo $formatted_number;
出力は520.00
になります。
round_to_2dp()
関数の定義はどうあるべきですか?
number_format() を使用できます。
return number_format((float)$number, 2, '.', '');
例:
$foo = "105";
echo number_format((float)$foo, 2, '.', ''); // Outputs -> 105.00
この関数は 文字列 を返します。
あるいは
$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00
round()
を使用します(数値をfloat形式でのみ期待している場合に使用します。それ以外の場合は Codemwnci の回答としてnumber_format()を使用します)。
echo round(520.34345,2); // 520.34
echo round(520, 2); // 520
マニュアルから:
説明:
float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] );
指定された
val
(小数点以下の桁数)に丸められたprecision
の値を返します。精度は負またはゼロにすることもできます(デフォルト)。
...
例1
round()
の例<?php echo round(3.4); // 3 echo round(3.5); // 4 echo round(3.6); // 4 echo round(3.6, 0); // 4 echo round(1.95583, 2); // 1.96 echo round(1241757, -3); // 1242000 echo round(5.045, 2); // 5.05 echo round(5.055, 2); // 5.06 ?>
例2モード例
<?php echo round(9.5, 0, PHP_ROUND_HALF_UP); // 10 echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9 echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10 echo round(9.5, 0, PHP_ROUND_HALF_ODD); // 9 echo round(8.5, 0, PHP_ROUND_HALF_UP); // 9 echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8 echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8 echo round(8.5, 0, PHP_ROUND_HALF_ODD); // 9 ?>
試してください:
$number = 1234545454;
echo $english_format_number = number_format($number, 2);
出力は次のようになります。
1,234,545,454.00
http://php.net/manual/en/function.round.php
例えば.
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
この問題を解決するためのもう1つのより風変わりな方法は、$ right_operandに0
のダミー値を指定して bcadd()
を使用することです。
$formatted_number = bcadd($number, 0, 2);
Phpのprintf
関数またはsprintf
関数を使用できます。
sprintf
の例:
$num = 2.12;
echo sprintf("%.3f",$num);
echo
なしでも同じように実行できます、ex: sprintf("%.3f",$num);
出力:
2.120
あるいは、printf
を使うと、
echo printf("%.2f",$num);
出力:
2.124
PHP number_format() functionを使用してください。
PHP number_format()関数を使用してください。例えば.
$num = 7234545423;
echo number_format($num, 2);
出力は次のようになります。
7,234,545,423.00
round_to_2dp
はユーザー定義関数です。その関数の宣言を投稿しない限り、何もできません。
しかし、私の推測ではこれをやっていますnumber_format($number,2);
私は自分で作ります。
$decimals = 2;
$number = 221.12345;
$number = $number * pow(10,$decimals);
$number = intval($number);
$number = $number / pow(10,$decimals);
条件付き四捨五入の場合それが本当に必要な場所に小数点を表示
123.56 => 12.56
123.00 => 123
$somenumber = 123.56;
$somenumber = round($somenumber,2);
if($somenumber == intval($somenumber))
{
$somenumber = intval($somenumber);
}
echo $somenumber; // 123.56
$somenumber = 123.00;
$somenumber = round($somenumber,2);
if($somenumber == intval($somenumber))
{
$somenumber = intval($somenumber);
}
echo $somenumber; // 123
bcdiv($number, 1, 2) //2 varies for digits after decimal
これは10進数の後に正確に2桁を表示します。
利点: float値の後にのみ2桁を表示し、intには表示しない場合は、これを使用します。
$retailPrice = 5.989;
echo number_format(floor($retailPrice*100)/100,2, '.', '');
四捨五入せずに5.98を返します。
$number = sprintf('%0.2f', $numbers); // 520.89898989 -> 520.89
これは10進数の後にあなたに2つの数を与えるでしょう。
プロジェクト全体で2桁の10進数を使用したい場合は、次のように定義できます。
bcscale(2);
それから次の関数はあなたの望む結果を生み出すでしょう
$myvalue=10.165445;
echo bcadd(0,$myvalue);
//result=10.11
しかし、bcscale関数を使用しない場合は、希望する結果を得るために次のようにコードを書く必要があります。
$myvalue=10.165445;
echo bcadd(0,$myvalue,2);
//result=10.11
もっと知るために
$twoDecNum = sprintf('%0.2f', round($number, 2));
四捨五入によって数値が正しく丸められ、丸めの後で小数点以下の桁数が1になった場合でも、sprintfによって小数点以下2桁に強制されます。
丸なしの数
$double = '21.188624';
echo intval($double).'.'.substr(end(explode('.',$double)),0,2);
ここで私は関数..を使用して。(ドット)の後に2進数を取得します.
function truncate_number( $number, $precision = 2) {
// Zero causes issues, and no need to truncate
if ( 0 == (int)$number ) {
return $number;
}
// Are we negative?
$negative = $number / abs($number);
// Cast the number to a positive to solve rounding
$number = abs($number);
// Calculate precision number for dividing / multiplying
$precision = pow(10, $precision);
// Run the math, re-applying the negative value to ensure returns correctly negative / positive
return floor( $number * $precision ) / $precision * $negative;
}
上記の関数からの結果:
echo truncate_number(2.56789, 1); // 2.5
echo truncate_number(2.56789); // 2.56
echo truncate_number(2.56789, 3); // 2.567
echo truncate_number(-2.56789, 1); // -2.5
echo truncate_number(-2.56789); // -2.56
echo truncate_number(-2.56789, 3); // -2.567
新しい正解
PHPネイティブ関数を使用する bcdiv
echo bcdiv(2.56789, 1, 1); // 2.5
echo bcdiv(2.56789, 1, 2); // 2.56
echo bcdiv(2.56789, 1, 3); // 2.567
echo bcdiv(-2.56789, 1, 1); // -2.5
echo bcdiv(-2.56789, 1, 2); // -2.56
echo bcdiv(-2.56789, 1, 3); // -2.567