mySQL dbテーブルにdecimal(15,4)タイプのフィールドがあります
私はこれまでこれを経験したことがありませんが、値が0.0000の場合、PHPのifステートメントがtrueを返します。
健全性チェックとして、私も次のことを行いました。
if(0.0000) echo "Hello World";
そして確かに、HelloWorldはエコーアウトしました。一体何が起こっているのですか?誰かアイデアがありますか?
mySQL dbテーブルにdecimal(15,4)タイプのフィールドがあります
私はこれまでこれを経験したことがありませんが、値が0.0000の場合、PHPのifステートメントがtrueを返します。
健全性チェックとして、私も次のことを行いました。
if(0.0000) echo "Hello World";
そして確かに、HelloWorldはエコーアウトしました。一体何が起こっているのですか?誰かアイデアがありますか?
DB から出力される float 値の場合、数値ではなく文字列として扱われます。これを試すことができます:
if(floatval($value) > 0) { ... }
DB$value
からの値が含まれています。
"0.0000"
問題は、db から文字列を取得したのに取得していないことだと思います0.0000
。
次を使用して再試行します。
if ((int)$your_value) echo "Hello World";
この質問が開かれてから長い時間が経っていることは知っていますが、他の誰かを助けるかもしれないと思いました.
float は、実際には の近似値ですReal Number
。Real numbers
すべてが float で表現できるわけではないことがわかります。これが、予期しない結果が得られる理由である可能性があります。http://php.net/manual/en/language.types.float.phpを読んでおく必要があります
。
ただし、より高い精度が必要な場合は、BC Math ライブラリのhttp://php.net/manual/en/ref.bc.phpを使用して調べる必要があります。
PHP バージョン (5.3.3) では、この動作はありません。
チェックを行う前に数値をboolにキャストすることをお勧めします: if ((bool) $float)
。