固定小数点数とは?使われる場面をわかりやすく解説!

こんにちは。ゆうせいです。
今回は 「固定小数点数(Fixed-point number)」 の使われる場面と、Javaにおける扱い方 について、わかりやすく丁寧に解説していきますね!

固定小数点数の基本:ざっくり言うと「小数点の位置が決まっている数」

まず、「固定小数点数」という言葉にピンとこない方のために説明しますね。

固定小数点数とは、「小数点の位置をあらかじめ決めておいて、その位置を動かさずに数を扱う」方式の数値表現です。

浮動小数点数との違いは?

よく比較されるのが「浮動小数点数(floating-point number)」です。これは、小数点の位置が変わることが特徴です。たとえば、1.23 や 123000000 のように、値の大きさに応じて精度や範囲を調整できます。

それに対して固定小数点数は、たとえば「小数点は必ず3桁目にある」と最初から決めておくので、ハード的にもソフト的にも扱いやすくなります。


固定小数点数が使われる場面とは?

1. 組み込みシステム(マイコンなど)

最も代表的なのが 組み込みシステム。たとえば、自動車の制御装置、冷蔵庫、電子レンジ、医療機器などです。

理由:

  • 浮動小数点演算はハードウェア的にコストが高く、消費電力が増える。
  • 低スペックCPUやDSPでは浮動小数点ユニットが搭載されていないことも多い。
  • 速度とメモリ効率が最優先。

たとえば:
電流センサーの値を「0.01A単位」で扱う場合、小数点を固定して「100倍した整数」で扱うと、浮動小数点演算をせずに済みます。

2. 通貨計算や財務アプリケーション

お金に関わる処理は「誤差」が絶対に許されないですよね。たとえば、1円でもズレるとトラブルになります。

例:

  • 銀行システム
  • 会計ソフト
  • 給与計算アプリ

なぜ固定小数点が適している?
→ 浮動小数点だと「0.1 + 0.2 ≠ 0.3」になる場合があり、誤差が蓄積されやすいからです。


Javaにおける固定小数点数の扱い方

Javaには固定小数点数型は存在しません(C言語などにはライブラリや手作業での実装があります)。ですが、代替手段として2つの代表的な方法があります。

方法1:BigDecimal を使う(通貨処理におすすめ)

Javaで精度を保ったまま小数を扱いたいなら、まずは BigDecimal クラスを使いましょう。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal price = new BigDecimal("199.99");
        BigDecimal taxRate = new BigDecimal("0.10");
        BigDecimal tax = price.multiply(taxRate);
        BigDecimal total = price.add(tax);
        System.out.println("Total: " + total);
    }
}

メリット

  • 精度が保証される。
  • 通貨や重量など「誤差が許されない」処理にぴったり。

デメリット

  • 実行速度が遅く、メモリも多く使う。
  • +* など演算子が使えない(メソッドで書く必要がある)。

方法2:整数として扱い、自分で「小数点の位置」を決める

もうひとつの方法は、「固定倍率で整数にしてしまう」というやり方です。

たとえば、「1000倍して整数として扱う」と決めておけば、1.23 は 1230 に変換して処理できます。

public class Main {
    public static void main(String[] args) {
        int value1 = 1230; // 1.23 * 1000
        int value2 = 450;  // 0.45 * 1000
        int result = value1 + value2; // = 1680
        System.out.println("Result: " + (result / 1000.0)); // 小数に戻す
    }
}

メリット

  • 演算が高速!
  • メモリ消費も少ない!

デメリット

  • スケーリング(倍率)の管理が必要。
  • 精度を超える計算になるとバグの原因に。

固定小数点数のメリット・デメリットまとめ

項目固定小数点数浮動小数点数
精度高い(制御しやすい)不安定なことがある
処理速度速い(整数演算ベース)遅いこともある
メモリ使用少ない多い
柔軟性低い(倍率固定)高い
適用例通貨、組み込み機器科学計算、ゲーム開発

今後の学習の指針

固定小数点数は、「安全性と確実性を最優先する処理」で威力を発揮します。もし金融系や組み込み系に興味があるなら、以下のテーマも学ぶと理解が深まりますよ!

学ぶとよいテーマ

  • JavaのBigDecimalの使い方(丸め、桁数設定)
  • C言語における固定小数点の実装方法
  • IEEE754規格(浮動小数点数の規格)の理解
  • 組み込みシステムの最適化手法

気になる用語や、実装してみたい処理があればどんどん聞いてくださいね!

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。