私はmysqlデータベースの金利を扱います。これらは二重に格納され、小数点以下の桁数(例:4.657)になりますが、時にはそれ以上です。時々、私はこれらを百分の1の場所(例:4.65)に報告する必要がありますが、これらを丸めることはできません - それらを切り捨てる必要があります。だから、5.6575%で私の金利データベースでは、私は5.65%ではなく、5.66%を取得する必要があります。MYSQL数値関数(floor、truncate)が期待通りに機能しない - 説明?
一般に、TRUNCATE(int_rate、2)はうまく動作します。これまで私は問題はなかった。
私は、以下の金利に問題があります:8.0300%、8.0400%、9.0300%、9.0400%、10.0300%、10.0400%...金利が8%を超えて3 4位は100位、残りは0位です。
TRUNCATE(int_rate、2)を実行すると、8.04がDBにある場合、8.03が返されます。 FLOOR(int_rate * 100)/ 100
数値をハードコードしてDBから抜かないと、TRUNCATE(8.04、2)またはTRUNCATEが正しく切り捨てられます。 (8.0400、2)は、期待どおり8.04を返します。
4.0400%でも問題ありません。だから8.0600%です!なぜこれらの結果を出すのですか?また、誰もがこのエラーなしでこれを行う方法を提案することができれば、それは驚くべきことでしょう!
のMySql:PHP floating point numbersから取ら5.0.95
浮動小数点は概算です。 '8.04'は実際には' 8.0399999999'のようなものなので、それを切り捨てると '8.03'が返されます。 – Barmar
'8.04'をハードコードすると、それは' DOUBLE'ではなくDECIMALとして解釈され、精度を失うことはありません。あなたのテーブルに 'DECIMAL'型を使わないのはなぜですか?これは精度を失うことのないアプリケーション向けに設計されています。 – Barmar