skillup

技術ブログ

Database プログラミング全般

浮動小数点に関して

投稿日:2021年11月27日 更新日:

金額計算なんかでfloatを使うと誤差が出るっていうのは基礎的な話ではありますが、背景知識を含めて理解しておこうと思ったのでメモります。

float,doubleでの誤差

浮動小数点とは目に見える小数点ではなく、計算で誤差が発生することを前提とした数値データになります。

理由としてはコンピューターは内部では当たり前ですが、2のn乗のような形でデータを格納しているため、実際には近似値の計算になってしまいます。

こういったデメリットはありますが非常に広い範囲の数を扱うことができ、数百桁レベルの数を扱うことができます。

ちなみに浮動小数点の逆が固定小数点であり、誤差が出ない代わりに桁数が制限されます。

金額の計算はdecimal型で

金額計算などをする場合、当然誤差は許されないので、その場合にはdecimal型を使うのが誤差が出ず問題がないようです。

ただ言語の方でdecimalに対応するライブラリがない、メモリを圧迫する、パフォーマンスを優先させたいなどの場合はfloat/doubleが選択肢としてあげられるようです。

参考リンク

10 進固定小数点数

なぜBigDecimalを使わなければならないのか

金額計算(会計処理など)は Decimal 型で、科学計算には Double 型 を使用する

MySQLのFLOAT型を使う理由が見つからない件

浮動小数点って何?

double, floatとdecimalの違い

-Database, プログラミング全般

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

トランザクション、ロールバックに関する考察

今までトランザクションの単位は基本的に処理の開始から終了までを範囲にすることが多かったのですが(ループがある場合はループ全体ではなく、1ループをトランザクションとみなします)、複数の処理が絡む場合、不 …

no image

自己結合のイメージ

前回に引き続き結合について考えます。 例えば下記のようなテーブルがあり、重複行を削除するとします。 1 りんご 50 2 みかん 100 3 みかん 100 4 みかん 100 5 バナナ 80 この …

no image

論理設計のアンチパターン その2

今回は論理設計のアンチパターンの続きです。 今までに比べると何も意図がないというものではなく、パフォーマンスを考えて設計されているようなものが多いです。 ただし、中には絶対に許されないタイプのものもあ …

no image

コードの抽象化

リーダブルコードも終盤に少しずつ近づいてきました。 今まではどちらかというとコードの点や線の技術に注目してきましたが、これからは面的な要素に注目していきます。 リーダブルコードでは「無関係の下位問題を …

no image

persistence.xmlのプロパティについて

JavaEEではデータベースとの設定情報はpersistence.xmlに記述します。 (ユーザー名、パスワード、ポート、driver名、データベース名などの情報はglassfish-resource …

アーカイブ