2011-01-22 11 views
0

浮動小数点値が整数の半分、例えば0.5,1.5,10.5などと言う最も効率的な方法は何でしょうか?浮動小数点数を定義するにはどうすればいいですか?

私の心に来て何を第一には、次のとおりです。

$is_half = (($number - floor($number)) === 0.5); 

は、任意のより良い解決策はありますか?

+2

** **浮動小数点数に平等を使用して比較することはありません。継承された不正確さがあります。 – poke

+2

@poke:0.5はfloatと同じように表現できるので、整数が非常に大きくなるまで問題はありません。 –

+1

@マイケル:もし整数部がそれを大きくすると、精度の欠如のために小数点はもはや格納されません...小数点の後に.5を持つすべての浮動小数点について、それは正確な表現... – ircmaxell

答えて

3

浮動小数点精度の誤差のために、通常、差がある程度小さいことを確認する必要があります(しかし、0.5は正確に表現できるので、問題ではないはずですが、一般的に浮動小数点数)。だからあなたのコードは、一般的にあなたがしたいかもしれません、あなたの特定の感覚のために良いです:

if (abs($number - floor($number) - $decimal) < 0.0001) { 
+0

$数値は整数の半分とはどのようにして決定されますか? –

0
if(abs($number) - (int)(abs($number)) == 0.5) { 
    // half of an integer. 
} 
関連する問題