PHP文字列を小数点以下2桁に丸める正しい方法は何ですか?
$number = "520"; // It's a string from a database
$formatted_number = round_to_2dp($number);
echo $formatted_number;
出力は次のようになり520.00
ます。
round_to_2dp()
関数定義はどのようにすべきですか?
PHP文字列を小数点以下2桁に丸める正しい方法は何ですか?
$number = "520"; // It's a string from a database
$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
この関数は文字列を返します。
round
は、ここではOPの問題を解決しません。round("520", 2)
floatを返し、520
もちろんエコーして小数点以下2桁まで表示しません。OPの目的-整数を小数点以下2桁まで後続ゼロで埋めることを示すために-丸め関数ではなく、数値フォーマット関数が必要です。
520,00
代わりに取得する必要がある場合520.00
、これは単に機能します。
使用round()
(浮動小数点形式の数値のみを想定している場合に使用します。それ以外の場合は、Codemwnciからの回答としてnumber_format()を使用します):
echo round(520.34345, 2); // 520.34
echo round(520.3, 2); // 520.3
echo round(520, 2); // 520
マニュアルから:
説明:
float round(float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]);
val
指定されたprecision
(小数点以下の桁数)に丸められた値を返します。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 ?>
round($number, 2);
は機能しません。520ではなく520.00が必要です。デフォルトでは、ラウンドがそれを行わないとは信じられません。
または、
$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00
520,00
ですか?その場合、他の答えがうまく機能すると思います。
http://php.net/manual/en/function.round.php
例えば
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
PHP printf
またはsprintf
関数を使用できます。
の例sprintf
:
$num = 2.12;
echo sprintf("%.3f", $num);
なしでも同じように実行できますecho
。例:sprintf("%.3f", $num);
出力:
2.120
代わりに、とprintf
:
echo printf("%.2f", $num);
出力:
2.124
PHPのnumber_format()関数を使用します。
例えば、
$num = 7234545423;
echo number_format($num, 2);
出力は次のようになります。
7,234,545,423.00
PHPのnumber_format()関数を使用します。
round_to_2dp
はユーザー定義関数であり、その関数の宣言を投稿しない限り、何もできません。
しかし、私の推測ではこれを行っています: number_format($number, 2);
round_to_2dp($number);
疑似コードとして意図された。OPは、その表現を何に置き換えるかを誰かに指示するように求めていました。
つまり、条件付き丸めの場合。それが本当に必要なところに小数点を表示し、そうでなければ整数
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
自分で作る。
$decimals = 2;
$number = 221.12345;
$number = $number * pow(10, $decimals);
$number = intval($number);
$number = $number / pow(10, $decimals);
ここでは.
、関数を使用して(ドット)の後に小数点以下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
ラウンドなしの数
$double = '21.188624';
echo intval($double) . '.' . substr(end(explode('.', $double)), 0, 2);
strtokとstr_padを使用した別のソリューションを次に示します。
$num = 520.00
strtok(round($num, 2), '.') . '.' . str_pad(strtok('.'), 2, '0')
number_format()はデフォルトで3桁区切りを追加するため、他の回答に追加します。
これを削除するには、次のようにします。
$number = number_format($number, 2, ".", "");
これを最後にきっぱりと!
function format_number($number,$dec=0,$trim=false){
if($trim){
$parts = explode(".",(round($number,$dec) * 1));
$dec = isset($parts[1]) ? strlen($parts[1]) : 0;
}
$formatted = number_format($number,$dec);
return $formatted;
}
例
echo format_number(1234.5,2,true); //returns 1,234.5
echo format_number(1234.5,2); //returns 1,234.50
echo format_number(1234.5); //returns 1,235
PHPのround()関数を使用できます。
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
round
数学関数であり、これは単なるフォーマットの問題です。