変数の最初の小数点を常に切り上げたいとします。例:常に最初の小数点を切り上げます
9.66 goes to 9.7
9.55 goes to 9.6
9.51 goes to 9.6
9.00000001 goes to 9.1
どうすればよいですか?オプションの精度および丸型引数を持つ
変数の最初の小数点を常に切り上げたいとします。例:常に最初の小数点を切り上げます
9.66 goes to 9.7
9.55 goes to 9.6
9.51 goes to 9.6
9.00000001 goes to 9.1
どうすればよいですか?オプションの精度および丸型引数を持つ
使用
round()
、例えば:
round($value, 1, PHP_ROUND_HALF_UP)
round()
にオプションの第二引数は精度引数であり、それは丸する桁数を指定します。 3番目のオプションの引数は、丸めモードを指定します。詳細は、
PHP manual for round
を参照してください。
round()
を使用
(例えば9.00001が9.1に丸められていない)PHP_ROUND_HALF_UPを用いた場合でも、必ずしも円形アップありません。代わりに、乗算、ceil()
と分裂を使用するように試みることができる:
ceil($value * 10.0)/10.0
これらは浮動小数点値なので、あなたが正確な結果を得られない可能性があります。
私は既にroundを使用していますが、3番目(またはそれ以上)の小数点以下が5になると常に切り捨てられます。また、precision引数も調べましたが、有用なものは見つかりませんでした。 –
私はそれが指定通りに正確に動作しないと思います。 9.00000001 => '.round(9.00000001,1、PHP_ROUND_HALF_UP).PHP_EOL; '私の出力は9です。 –
[この質問](http://stackoverflow.com/q/36324171/3919155)お手伝いをしていますが、私は自分の答えを編集して、問題に対する簡単な代替ソリューションを提供しました。 – jotik
カスタムceil()関数が必要です。デフォルト関数またはラウンドでは、あなたの要件を満たすことができません。
私はPHPプログラマーではないので、「ステップ」で答えなければなりません。あなたが持っている問題は、ちょうど1つの10進数の数字を持っている場合です。 (例えば9.5)
ここであなたがそれを行うことができる方法です:
bool is_int (mixed $var)
を明らかスニッフィング、ステップ(2)10.
によって結果を割り
私はカップルのテストを行い、テストケース
<?php
echo '9.66 (expected 9.7) => '.myRound(9.66).PHP_EOL;
echo '9.55 (expected 9.6) => '.myRound(9.55).PHP_EOL;
echo '9.51 (expected 9.6) => '.myRound(9.51).PHP_EOL;
echo '9.00000001 (expected 9.1) => '.myRound(9.00000001).PHP_EOL;
echo '9.9 (expected ??) => '.myRound(9.9).PHP_EOL;
echo '9.91 (expected ??) => '.myRound(9.91).PHP_EOL;
function myRound($value)
{
return ceil($value*10)/10;
}
ここでの質問は、9.91の結果はどうなるでしょうか?私はそれが10であるべきだと思う。 –
使用これで、次の答えを示唆:online test
あなたがこのテクニックを使用することができます。与えられた数字/文字列を爆発させ、.
の次の値/数字である数字を取得します。これを取得した後、その値をインクリメントして、値が9より大きいかどうかを確認する必要があります。また、それを除算して、キャリーをメイン番号の最初の部分に追加する必要があります。
$var = '9.96';
$ar = explode(".", $var);
$nxt = substr($ar[1], 0, 1) + 1;
if($nxt > 9){
$tmp = (string) $nxt;
$num = floatval(($ar[0] + $tmp[0]).".".$tmp[1]);
}
else
$num = floatval($ar[0].".".$nxt);
var_dump($num); // float(10)
[丸め](http://stackoverflow.com/q/12277945/3919155)に関する同様の質問です。 – jotik