web-dev-qa-db-ja.com

PHPで浮動小数点数の精度を設定します

データベースから番号を取得しましたが、この番号はfloatまたはintのいずれかです。

数値の小数精度を_3_に設定する必要があります。これにより、数値は(小数に関して)_5.020_または_1518845.756_より長くなりません。

PHPの使用

_round($number, $precision)
_

問題が発生しました:

数値を丸めます。 round( )が従わないと思われる値を変更せずに、小数を短くするだけの関数が必要です。

11
Mostafa Talebi

number_format() を使用してこれを達成できます:

echo number_format((float) $number, $precision, '.', ''); 

これにより、1518845.7567891518845.757に変換されます。

ただし、小数点以下の桁数を3に切り詰めたいだけの場合、not丸め 、次の操作を実行できます。

$number = intval($number * ($p = pow(10, $precision))) / $p;

最初は威圧的に見えるかもしれませんが、コンセプトは本当にシンプルです。あなたは数を持っています、あなたはそれを10倍します (それは1518845756.789になります)、整数にキャストして、小数点以下3桁目以降をすべて削除し(1518845756になります)、結果を10で割ります。1518845.756になります)。

デモ

23
Amal Murali

小数を含むfloorのように聞こえます。だからあなたは次のようなことを試すことができます

floor($number*1000)/1000
13
georgecj11

私が正しく理解していれば、丸めを行わないで、精度を3にする必要があります。

したがって、アイデアは number_format() を精度4で使用し、最後の桁を削除することです。

_$number = '1518845.756789';
$precision = 3;

echo substr(number_format($number, $precision+1, '.', ''), 0, -1);
_

表示されます:

_1518845.756
_

のではなく:

_1518845.757
_

リンク: number_format()substr()

3
Uours

詳細は this answer を参照してください。

function numberPrecision($number, $decimals = 0)
{
    $negation = ($number < 0) ? (-1) : 1;
    $coefficient = pow(10, $decimals);
    return $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
}
1
Derezzed