C#
 Computer >> コンピューター >  >> プログラミング >> C#

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つの型の比較まとめ

サイズ精度(有効桁数)主な用途
float4バイト約6〜9桁ゲーム、グラフィックスなど
double8バイト約15〜17桁科学技術計算、一般の数値演算
decimal16バイト28〜29桁金額計算、財務処理

精度とメモリのトレードオフを理解し、目的に合った型を選択することが、バグのない堅牢なプログラムを書くための第一歩です。特に金銭に関わる処理では、誤差のないdecimal型を使うことを忘れないようにしましょう。

  1. C#におけるリテラルと定数の違いとは?種類と書き方をわかりやすく解説

    定数とリテラルとは何か 定数(constant)とは、プログラムの実行中に値を変更できない固定値のことです。そして、その固定値をソースコード上に直接記述したものを「リテラル」と呼びます。定数は整数、浮動小数点数、文字、文字列といった基本データ型のいずれにもなり得ます。さらに、enum(列挙型)による列挙定数も存在します。 整数リテラル 整数リテラルは、10進数または16進数で表現できます。基数を指定するにはプレフィックス(接頭辞)を使用します。16進数の場合は「0x」または「0X」を付け、10進数の場合はプレフィックスを付けません。 150 300u 上記の例では「150」が10進数の整数リ

  2. C#におけるstringとStringの違いは何ですか?

    C#のstringとStringの違いC#プログラミングにおいて、stringとStringはどちらも同じ型を指しますが、その扱いには微妙な違いがあります。Stringは.NET FrameworkのクラスであるSystem.Stringを直接表すものであり、一方、stringはC#言語が用意しているSystem.Stringのエイリアス(別名)です。つまり、両者はコンパイル後にまったく同じものとして扱われます。基本的な使い方の例string str = Welcome!;このように文字列変数を宣言する際は、通常小文字のstringを使用します。使い分けの目安厳密なルールはありませんが、一般的