PHP では、浮動小数点フィールドをクエリするときに問題が発生する場合があります。この記事では、これらの問題を解決して浮動小数点フィールドの正確なクエリを保証する方法について説明します。
問題を解決する前に、浮動小数点型に関する知識を理解しておく必要があります。浮動小数点データは、小数および/または指数を表します。コンピューター内では、これらは科学表記法 (a * 10^n) で表されます。このうち、a は数値の小数部、n は指数部です。浮動小数点データは非常に正確ですが、コンピューターが浮動小数点データを表現するときに丸める必要があるため、精度の問題が発生することがあります。
浮動小数点フィールドをクエリする場合、問題の主な原因は浮動小数点フィールドを表現する際の PHP の丸めです。コンピュータは内部的に 2 進数を使用し、浮動小数点データは通常 10 進数を使用するため、10 進数の浮動小数点を 2 進数に変換するときに丸め誤差が発生することがあります。これにより、PHP で浮動小数点フィールドをクエリするときに精度エラーが発生する可能性があります。
浮動小数点フィールドのクエリの精度を確保するには、次の 2 つの解決策を使用できます。
3.1 文字列比較
この方法では、比較時に浮動小数点データが完全に正確な値を使用することが保証されます。文字列比較では、浮動小数点数を数値として理解するのではなく、文字列として扱います。ほとんどの場合、これで機能しますが、多数の比較を行う必要がある場合は、効率の問題が発生する可能性があります。
たとえば、値が 8.6 の浮動小数点フィールドの価格があるとします。クエリ文字列を次のように設定できます:
SELECT * FROM products WHERE Price = '8.6';
これにより、クエリでは比較に完全に正確な値が使用されます。
3.2 誤差範囲の比較
この方法では、浮動小数点数の正確な値を直接比較するのではなく、浮動小数点数を誤差範囲と比較します。これにより、丸め誤差によって引き起こされる小さな変動を処理し、浮動小数点数の精度を比較することができます。これは次の方法で実現できます:
SELECT * FROM products WHERE 価格 BETWEEN 8.5 AND 8.7;
このクエリは、8.5 と 8.7 の間のすべての価格値 (これら 2 つの値を含む) を返します。 ) 製品。
PHP では、各浮動小数点型に異なる符号ビット、指数ビット、仮数ビットがあります。つまり、異なる型の浮動小数点は丸められる可能性があります。違う。浮動小数点フィールドのクエリの精度を確保するには、文字列比較またはエラー範囲比較を使用できます。文字列比較では比較に完全に正確な値が使用されますが、誤差範囲比較では浮動小数点数を特定の誤差と比較できます。
以上がPHPクエリの浮動小数点フィールドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。