固定小数点数とは?使われる場面をわかりやすく解説!
こんにちは。ゆうせいです。
今回は 「固定小数点数(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規格(浮動小数点数の規格)の理解
- 組み込みシステムの最適化手法
気になる用語や、実装してみたい処理があればどんどん聞いてくださいね!
投稿者プロフィール
