データベースから番号を取得しましたが、この番号はfloat
またはint
のいずれかです。
数値の小数精度を_3
_に設定する必要があります。これにより、数値は(小数に関して)_5.020
_または_1518845.756
_より長くなりません。
PHPの使用
_round($number, $precision)
_
問題が発生しました:
数値を丸めます。 round( )
が従わないと思われる値を変更せずに、小数を短くするだけの関数が必要です。
number_format()
を使用してこれを達成できます:
echo number_format((float) $number, $precision, '.', '');
これにより、1518845.756789
が1518845.757
に変換されます。
ただし、小数点以下の桁数を3に切り詰めたいだけの場合、not丸め 、次の操作を実行できます。
$number = intval($number * ($p = pow(10, $precision))) / $p;
最初は威圧的に見えるかもしれませんが、コンセプトは本当にシンプルです。あなたは数を持っています、あなたはそれを10倍します3 (それは1518845756.789
になります)、整数にキャストして、小数点以下3桁目以降をすべて削除し(1518845756
になります)、結果を10で割ります。3 (1518845.756
になります)。
小数を含むfloor
のように聞こえます。だからあなたは次のようなことを試すことができます
floor($number*1000)/1000
私が正しく理解していれば、丸めを行わないで、精度を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()
詳細は this answer を参照してください。
function numberPrecision($number, $decimals = 0)
{
$negation = ($number < 0) ? (-1) : 1;
$coefficient = pow(10, $decimals);
return $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
}