2016-06-19 9 views
0

これが正常ではあるが個人的には正しい結果を与えているとは思わない。この例を見てみましょうPHPの丸めの異常?

$a = 3.32475; 
$b = round($a,2,PHP_ROUND_HALF_UP); 

私は3.33を期待していましたが、代わりに3.32を得ました。私はここに何かを逃していますか丸め関数は文字通り全体の値の代わりに3番目の小数点の値を使用していますか?

- 3.32475 
- 3.3248 
- 3.325 
- 3.33 

私が間違ってここで何かをやっている - は:このような何か

私は期待していた何をしましたか? 3番目の小数点ではなく、全体の値に対して正確な丸めの基底を得るための良い方法がありますか?

ありがとうございました。

+0

簡単な歴史...私は0から3小数点または完全な値から答えを設定することができますそれらの派手な電卓を持っています。私がしたことは、132.99の2.5%を得ることでした。完全な設定では、それは3.32475として出てきましたが、小数点以下2桁では3.33となりました。だから私はPHP round()で同じ結果を得ることができない理由についてこの質問を投稿したのです。 – asyadiqin

答えて

1

それは3.33何>= 3.325に切り上げます。あなたの価値はそれよりも小さいので、3.32に切り下げられます。 the docsで述べたように

PHP_ROUND_HALF_UPの意味:

をラウンドヴァルゼロから精度の小数点以下の桁数まで、それはそこに半分の方法です。 -2を1.5に、-1.5を-2にする。あなたは、それが "丸い" まで強制ceil()の代わりround()を使用したい場合は

を[強調追加]:

$a = 3.32475; 
$b = ceil($a * 100)/100; 

これは、その後、 "天井" 332.475の値、すなわち、333を、見つけましたそれを100で割って3.33を与えます。

また、あなたがそれを行うための特別なルーチンを書いていない限り、丸めは実際にあなたが記述したように動作することはないことに注意してください(そして、あなたが望む実際の理由は考えられません。そうするために)。

+0

それはその値で動作しますが、3.392727で試してみてください。あなたの答えを使って私が返す3.39 – asyadiqin

+0

@asyadiqinあなたが何を意味するかわからない私の空想の電卓は、3.39の値を返します。あなたの電卓はPHPのしくみと何が関係していますか?また、 'ceil'は' round'の別名ではありません。 –

+0

私の謝罪...たぶん私はそれをより良く説明することができます。私の問題は、私の機能を使っている人が、通常、派手な電卓を使ってチェックするからです。だから私は正確な結果を提供する必要があります。 – asyadiqin