C#のfloat・double・decimalの違いを徹底解説!精度・範囲・メモリサイズの比較と使い分け
C#には、小数点を含む数値を扱うためにfloat(浮動小数点型)、double(倍精度浮動小数点型)、decimal(10進数型)の3つの型が用意されています。これらはすべてC#における値型(Value Type)に分類されます。
値型の変数には、値を直接代入することができます。これらの型はすべて System.ValueType クラスから派生しており、変数自体がデータを直接保持するという特徴があります。
一見似ているこの3つの型ですが、精度・表現できる範囲・メモリサイズが異なるため、用途に応じた使い分けが重要です。以下、それぞれの特徴を詳しく見ていきましょう。
float型(単精度浮動小数点型)
floatは32ビットの単精度浮動小数点型で、約 ±3.4 × 1038 までの範囲の値を表現できます。
- メモリサイズ:4バイト
- 有効桁数:約6〜9桁
float型のリテラルを代入する際は、末尾に f または F を付ける必要があります。
float a = 3.5f;
メモリ消費が少ないため、精度がそこまで求められないゲーム開発やグラフィックス処理などでよく使われます。
double型(倍精度浮動小数点型)
doubleは64ビットの倍精度浮動小数点型で、±5.0 × 10-324 から ±1.7 × 10308 という非常に広い範囲の値を表現できます。
- メモリサイズ:8バイト
- 有効桁数:約15〜17桁
double d = 5.78788;
floatと比べてはるかに高い精度を持ち、C#では小数点数のデフォルトの型でもあります。科学技術計算や一般的な数値演算において、最も広く使われている型です。なお、リテラルの末尾に d または D を付けることもできますが、省略可能です。
decimal型(10進数型)
decimalは128ビットの10進数型で、28〜29桁の有効数字を持ち、範囲は ±7.9 × 1028 です(指数部は 100 〜 1028)。
- メモリサイズ:16バイト
- 有効桁数:28〜29桁
decimal型のリテラルを代入する際は、末尾に M または m を付ける必要があります。
decimal d = 1.0M;
decimalは2進数ではなく10進数で数値を表現するため、floatやdoubleに比べて丸め誤差が発生しにくいという大きな特徴があります。そのため、金額計算などの財務処理において、この型の使用が強く推奨されています。
3つの型の比較まとめ
| 型 | サイズ | 精度(有効桁数) | 主な用途 |
|---|---|---|---|
| float | 4バイト | 約6〜9桁 | ゲーム、グラフィックスなど |
| double | 8バイト | 約15〜17桁 | 科学技術計算、一般の数値演算 |
| decimal | 16バイト | 28〜29桁 | 金額計算、財務処理 |
精度とメモリのトレードオフを理解し、目的に合った型を選択することが、バグのない堅牢なプログラムを書くための第一歩です。特に金銭に関わる処理では、誤差のないdecimal型を使うことを忘れないようにしましょう。
-
C#におけるリテラルと定数の違いとは?種類と書き方をわかりやすく解説
定数とリテラルとは何か 定数(constant)とは、プログラムの実行中に値を変更できない固定値のことです。そして、その固定値をソースコード上に直接記述したものを「リテラル」と呼びます。定数は整数、浮動小数点数、文字、文字列といった基本データ型のいずれにもなり得ます。さらに、enum(列挙型)による列挙定数も存在します。 整数リテラル 整数リテラルは、10進数または16進数で表現できます。基数を指定するにはプレフィックス(接頭辞)を使用します。16進数の場合は「0x」または「0X」を付け、10進数の場合はプレフィックスを付けません。 150 300u 上記の例では「150」が10進数の整数リ
-
C#におけるstringとStringの違いは何ですか?
C#のstringとStringの違いC#プログラミングにおいて、stringとStringはどちらも同じ型を指しますが、その扱いには微妙な違いがあります。Stringは.NET FrameworkのクラスであるSystem.Stringを直接表すものであり、一方、stringはC#言語が用意しているSystem.Stringのエイリアス(別名)です。つまり、両者はコンパイル後にまったく同じものとして扱われます。基本的な使い方の例string str = Welcome!;このように文字列変数を宣言する際は、通常小文字のstringを使用します。使い分けの目安厳密なルールはありませんが、一般的