浮動小数点値が整数の半分、例えば0.5,1.5,10.5などと言う最も効率的な方法は何でしょうか?浮動小数点数を定義するにはどうすればいいですか?
私の心に来て何を第一には、次のとおりです。
$is_half = (($number - floor($number)) === 0.5);
は、任意のより良い解決策はありますか?
浮動小数点値が整数の半分、例えば0.5,1.5,10.5などと言う最も効率的な方法は何でしょうか?浮動小数点数を定義するにはどうすればいいですか?
私の心に来て何を第一には、次のとおりです。
$is_half = (($number - floor($number)) === 0.5);
は、任意のより良い解決策はありますか?
浮動小数点精度の誤差のために、通常、差がある程度小さいことを確認する必要があります(しかし、0.5は正確に表現できるので、問題ではないはずですが、一般的に浮動小数点数)。だからあなたのコードは、一般的にあなたがしたいかもしれません、あなたの特定の感覚のために良いです:
if (abs($number - floor($number) - $decimal) < 0.0001) {
$数値は整数の半分とはどのようにして決定されますか? –
if(abs($number) - (int)(abs($number)) == 0.5) {
// half of an integer.
}
** **浮動小数点数に平等を使用して比較することはありません。継承された不正確さがあります。 – poke
@poke:0.5はfloatと同じように表現できるので、整数が非常に大きくなるまで問題はありません。 –
@マイケル:もし整数部がそれを大きくすると、精度の欠如のために小数点はもはや格納されません...小数点の後に.5を持つすべての浮動小数点について、それは正確な表現... – ircmaxell