web-dev-qa-db-ja.com

小数点以下2桁までの数を表示

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()関数の定義はどうあるべきですか?

463
Rich Bradshaw

number_format() を使用できます。

return number_format((float)$number, 2, '.', '');

例:

$foo = "105";
echo number_format((float)$foo, 2, '.', '');  // Outputs -> 105.00

この関数は 文字列 を返します。

945
Codemwnci

あるいは

$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00
176
Marc B

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
?>
156
Somnath Muluk

試してください:

$number = 1234545454; 
echo  $english_format_number = number_format($number, 2); 

出力は次のようになります。

1,234,545,454.00
24
Biju

http://php.net/manual/en/function.round.php

例えば.

echo round(5.045, 2);    // 5.05

echo round(5.055, 2);    // 5.06
23
SystemX17

この問題を解決するためのもう1つのより風変わりな方法は、$ right_operandに0のダミー値を指定して bcadd() を使用することです。

$formatted_number = bcadd($number, 0, 2);
11
powtac

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 
11
Aditya P Bhatt

PHP number_format() functionを使用してください。

9
Shamim Hafiz

PHP number_format()関数を使用してください。例えば.

$num = 7234545423; 
echo number_format($num, 2); 

出力は次のようになります。

7,234,545,423.00

7
Sani Kamal

round_to_2dpはユーザー定義関数です。その関数の宣言を投稿しない限り、何もできません。

しかし、私の推測ではこれをやっていますnumber_format($number,2);

7
ajreal

私は自分で作ります。

$decimals = 2;
$number = 221.12345;
$number = $number * pow(10,$decimals);
$number = intval($number);
$number = $number / pow(10,$decimals);
6
joanlgr

条件付き四捨五入の場合それが本当に必要な場所に小数点を表示

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    
6
Viney
bcdiv($number, 1, 2) //2 varies for digits after decimal

これは10進数の後に正確に2桁を表示します。

利点: float値の後にのみ2桁を表示し、intには表示しない場合は、これを使用します。

6
Wasim A.
$retailPrice = 5.989;
echo number_format(floor($retailPrice*100)/100,2, '.', ''); 

四捨五入せずに5.98を返します。

5
mrphpguru
$number = sprintf('%0.2f', $numbers); // 520.89898989 -> 520.89

これは10進数の後にあなたに2つの数を与えるでしょう。

5
S'copion Sam

プロジェクト全体で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

もっと知るために

4
jewelhuq
$twoDecNum = sprintf('%0.2f', round($number, 2));

四捨五入によって数値が正しく丸められ、丸めの後で小数点以下の桁数が1になった場合でも、sprintfによって小数点以下2桁に強制されます。

3
JohnS

丸なしの数

$double = '21.188624';
echo intval($double).'.'.substr(end(explode('.',$double)),0,2);
2
Abhishek Sharma

ここで私は関数..を使用して。(ドット)の後に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
2
Mr. HK

まだ見たことがないので、 strtok および str_pad を使用した別の解決策を次に示します。

$num = 520.00
strtok(round($num, 2), '.') . '.' . str_pad(strtok('.'), 2, '0')
0
Bryan