2017-03-14 6 views
4

私は非常に奇妙な問題を発見しました。問題はPHPとJavaScriptのROUNDメソッドで計算結果が同じではありません!PHP ROUNDとJavascript ROUND

は、次の例を参照してください:

PHP

echo round(175.5); // 176 
echo round(-175.5); // -176 

Javascriptを

console.log(Math.round(175.5)); // 176 
console.log(Math.round(-175.5)); // -175 <-why not -176!!?? 

誰もがなぜ知っていますか? JavascriptとPHPを同じようにする方法は?

+0

なぜこれはあなたにとって奇妙なのですか? –

+0

[javascript vs php rounding](http://stackoverflow.com/questions/6437062/javascript-vs-php-rounding)および[javascriptの浮動小数点演算](http://stackoverflow.com/questions/1458633/how -to-deal-with-floating-point-number-precision-in-javascript) –

+0

Plz PHP_ROUND_定数のチェックhttp://it1.php.net/manual/en/math.constants.phpそしてjavascriptはPHPではありません。 – JustOnUnderMillions

答えて

4

を丸めるためにどの方法を選択することができますこうすることで、それがうまくdocumentedある

小数部分がちょうど0.5の場合、引数は+の方向に次の整数 に丸められます∞。これは 多くの言語のround()関数とは異なります。この場合は、次の整数が0から離れた に丸められることがあります( の小数部分が正確に0.5の場合に別の結果が与えられます)。

あなたはJavascriptで同じ動作をする場合、私は

var n = -175.5; 
var round = Math.round(Math.abs(n))*(-1) 
+0

あなたの答えをありがとう。 – Jasper

+0

あなたは歓迎です:) – DrKey

1

さらに制御するには、丸めにceilfloorを使用します。あなたが問題ではないのです

2

迅速な解決には次の操作を行うことで使用します。

echo round(-175.5, 0, PHP_ROUND_HALF_DOWN); // -175 

から選択する他のモードがあります。

  1. PHP_ROUND_HALF_UP - デフォルト
  2. PHP_ROUND_HALF_EVEN
  3. PHP_ROUND_HALF_ODD

詳細についてはdocumentationを参照してください。

この関数は、と同じように動作します:

function jsround($float, $precision = 0){ 
    if($float < 0){ 
    return round($float, $precision, PHP_ROUND_HALF_DOWN); 
    } 

    return round($float, $precision); 
} 
+0

あなたの答えをありがとう、あなたの答えも非常に便利ですが、1つだけを選択することができます:(。 – Jasper

+0

心配しないで、あなたは '-176'の価値を望んでいました。同じ値が[tag:PHP]から制御されます。 – Xorifelse

2
console.log(Math.round(175.5)); // 176 
console.log(Math.round(-175.5)); // -175 <-why not -176!!?? 

175.5そのラウンド値176は、それが増加する値です。

-175.5の値は-175です。私が-175.5を回すと-175> -176という意味も増えるので、