データ型

固定小数点型 こていしょうすうてんがた

固定小数点浮動小数点数値型精度金融計算DECIMAL
固定小数点型について教えて

簡単に言うとこんな感じ!

小数点の位置をあらかじめ「ここ!」って決め打ちしておく数値の表し方だよ。「整数部は5桁、小数部は2桁」って決めておくから、お金の計算みたいに「1円のズレも許さない!」場面にぴったりなんだ!


固定小数点型とは

固定小数点型(Fixed-point type)とは、数値を表すときに小数点の位置があらかじめ固定されているデータ型のことです。たとえば「整数部10桁、小数部2桁」と決めたら、どんな値を入れてもその形式を守って表現されます。

この型の最大の特徴は誤差が生じにくい正確な10進数演算ができることです。コンピュータは内部で2進数を使って計算しているため、0.1 + 0.2 のような単純な計算でも微妙なズレ(丸め誤差)が生じることがあります。固定小数点型はこの問題を回避するために、10進数の桁数と小数点位置を明示的に管理する仕組みを取っています。

銀行システムや会計ソフト、ECサイトの価格計算など、1円・1セントの誤差も許されないビジネス用途で広く使われており、SQLの DECIMAL 型やJavaBigDecimal クラスが代表例です。


固定小数点型の構造と仕組み

固定小数点型は、数値を表すときに 精度(precision)スケール(scale) の2つのパラメータで定義されます。

パラメータ意味例: DECIMAL(10, 2)
精度(precision)全体の有効桁数10桁
スケール(scale)小数点以下の桁数2桁
整数部の桁数precision − scale8桁
表現できる最大値整数部8桁・小数2桁99,999,999.99

たとえば DECIMAL(10, 2) の列に 12345.678 を入れようとすると、小数3桁目は切り捨て(または四捨五入)されて 12345.68 として保存されます。

覚え方:「固定=場所取り」

固定小数点型は「小数点の席(場所)を事前に予約しておく」イメージです。席が決まっているから誰が来ても迷わない、でも席数以上は座れない——そう覚えると整理しやすいです。

主なプログラミング言語・DBでの表記

言語・DB固定小数点型の表記
SQL(標準)DECIMAL(p, s) / NUMERIC(p, s)
Javajava.math.BigDecimal
Pythondecimal.Decimal
C#decimal(128ビット固定小数点)
PostgreSQLNUMERIC(p, s)
MySQLDECIMAL(p, s)

歴史と背景

  • 1950年代〜: 初期のコンピュータは整数演算しか持たず、プログラマが「整数の最後2桁を小数とみなす」という疑似的な固定小数点演算を自前で実装していた
  • 1960年代: IBM System/360 がハードウェアレベルで10進数演算命令(BCD: Binary Coded Decimal)をサポートし、商用計算での固定小数点処理が普及した
  • 1985年: IEEE 754 が浮動小数点の標準規格として策定され、科学技術計算では浮動小数点が主流になった
  • 1990年代〜: SQLにおける DECIMAL/NUMERIC 型が広く普及し、金融・会計システムの標準的な数値型として定着
  • 2000年代以降: Java の BigDecimal、Python の decimal モジュール、C# の decimal 型など、高水準言語でも固定小数点演算が標準ライブラリに組み込まれた

固定小数点型 vs 浮動小数点型

IT現場でよく混同されるのが浮動小数点型(float / double)との違いです。どちらも小数を扱えますが、用途と特性がまったく異なります。

固定小数点型 DECIMAL / NUMERIC 小数点の位置:固定 精度:完全に保証される 表現範囲:宣言した桁数まで 速度:やや遅い(ソフトウェア処理) ✅ 金融・会計・ECサイト価格 浮動小数点型 float / double 小数点の位置:動的に変化 精度:丸め誤差が生じうる 表現範囲:非常に広い 速度:速い(ハードウェア処理) ✅ 科学計算・3Dグラフィクス

丸め誤差の具体例

浮動小数点型では次のような問題が起きることがあります。

# Python での例
>>> 0.1 + 0.2
0.30000000000000004   ← 0.3 にならない!

# decimal モジュール(固定小数点的な動作)を使うと
>>> from decimal import Decimal
>>> Decimal('0.1') + Decimal('0.2')
Decimal('0.3')        ← 正確!

金融システムで float を使って合計金額を計算すると、数百件の集計後に1〜2円のズレが生じることがあります。これが固定小数点型を使うべき最大の理由です。


関連する規格・RFC

規格内容
ISO/IEC 9075(SQL標準)DECIMAL 型・NUMERIC 型の定義。精度とスケールの扱いを規定
IEEE 754-2008浮動小数点の標準規格。固定小数点との対比として重要
ISO/IEC 9899(C言語標準)整数型を用いた固定小数点演算の基礎となるC言語仕様

関連用語

  • 浮動小数点型 — 小数点の位置が動的に変わる数値型。速度は速いが丸め誤差が生じる
  • 整数型 — 小数部を持たない数値型。固定小数点型の土台となる概念
  • データ型変数に格納できる値の種類を定義する型システム全般
  • DECIMAL型 — SQLにおける固定小数点型の代表的な実装
  • 丸め誤差 — 浮動小数点演算で生じる微小な計算誤差
  • BigDecimal — Javaにおける任意精度の固定小数点演算クラス
  • BCD(2進化10進数) — 10進数を2進数で表現する符号化方式。固定小数点の実装基盤