2016-08-03 4 views
4

数値を丸めたいので、配列キーとして使用したいので適切な整数が必要です。最初の「解決策」は次のとおりです。整数へのPHPの換算

$key = (int)round($number) 

ただし、これが常に機能するかどうかはわかりません。私が知る限り、(int)は任意の小数点以下を切り捨てるだけで、round($number)は理論的に精度が限定された浮動小数点数を返しますので、round($number)は7.999999 ...のようなものを返し、次に$keyは8ではなく7ですか?

この問題が実際に存在する場合(私はそれをテストする方法はわかりません)、どのように解決できますか?多分:

$key = (int)(round($number) + 0.0000000000000000001) // number of zeros chosen arbitrarily 

もっと良い解決策がありますか?最も近い整数に

+2

浮動小数点数に格納される整数は常に正確に約2^51までです。これは、とにかく 'int'に格納できるよりはるかに多くなります。あなたは何も心配していません。 –

+0

@NiettheDarkAbsolおっと、私は実際に(Javascriptから)知っていましたが、接続していませんでした。あなたはそれを答えるべきです。 BTW、JSでは2^53-1 iircです。 – AndreKR

+0

丸められた数字をキーとして使うと、丸められた8の結果を持つ7.xの数字が2つ以上あると問題が起きます。 –

答えて

4

あなたが使用することができ、適切に浮かびますしかし、Niet the Dark Absol commentから "浮動小数点数に格納される整数は常に正確で、とにかくintに格納できるよりもはるかに大きい2^51です。 "

-1

ラウンド

$キー= ROUND($番号、0);

これらの関数は、floatを返すのラウンドに

+0

浮動小数点数を返します。 – AndreKR

+0

$ key = intval(round($ number、0))または$ key =(int)round($ number、0) –

+0

あなたも*私の質問を読んだことがありますか?私は特に、(int)round($ number)を、十分にはないと思った例として挙げました。 – AndreKR

0

round()精度セットは常に最も近い整数に丸められません。デフォルトでは、小数点以下は丸められます。

だから:あなたの目標は、配列のキーとしてこれを使用する場合

$int = 8.998988776636; 
round($int) //Will always be 9 

$int = 8.344473773737377474; 
round($int) //will always be 8 

ので、これは問題ないはずです。

モードと精度を使用して、round()の振る舞いを正確に指定できます。 thisを参照してください。あなたが実際にintvalでより興味があるかもしれません

UPDATE

echo intval(round(4.7)); //returns int 5 
echo intval(round(4.3)); // returns int 4 
+0

いいえ、 'intval(4.7)== 4'です。これは私が望んでいないものです。 – AndreKR

+0

さて、 'intval'それ自身で。それを「ラウンド」と組み合わせる。私は私の答えを更新しました –

+0

それは私が記述したのと同じ(非)問題を抱えています。 – AndreKR

0

丸め番号を処理するための3つの機能があります:ラウンド、ceilは(切り上げ)、floor(切り捨て)。私はどちらを使いたいのか分からない。

0

浮動小数点数に格納される整数は、常に正確に約2までです。これは、とにかくintに格納することができます。私は何も心配していません。