Help us understand the problem. What is going on with this article?

SQLアンチパターン:ラウンディングエラー(丸め誤差)

More than 3 years have passed since last update.

SQLアンチパターンを読み始めたので、1つ1つ書いてのメモです

目的

  • 目的:整数の代わりに小数値を使用する

アンチパターン

  • FLOAT データ型を使用する
    • 丸めが避けられない
    • 0.333.. のような循環少数がある
    • 有限精度となる
SELECT * FROM Accounts WHERE hourly_rate = 59.95;
-- 一致する行はない。59.95 は、59.950000762939 として格納されているから

浮動小数点数の誤差累積の影響は、和ではなく、積を計算する場合にさらに大きくなります

用いてもいいパターン

科学技術計算を行うアプリケーション

解決策

  • NUMERIC 、DECIMAL データ型を使用する
ALTER TABLE Bugs ADD COLUMN hours NUMERIC(9,2); 
ALTER TABLE Accounts ADD COLUMN hourly_rate NUMERIC(9,2);

まとめ

  • 正確な 10 進数値が必要な場合は、NUMERIC を使う
  • できる限り、FLOAT 型は使わないようにしましょう。

感想

  • float 使ってた...

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away