0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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 使ってた...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?