C#の数値型を完全解説|int・doubleの違いから文字列変換・判定まで初心者向けにわかる
はじめに
C#でプログラムを書くとき、数値はほぼ必ず登場します。年齢、個数、金額、割合、座標、スコア、税率、入力値のチェックなど、さまざまな場面で数値を扱います。
しかし、C#の数値には int、double、decimal、long、float など複数の型があり、初心者のうちは「どれを使えばいいのか」「文字列から数値に変換するにはどうすればいいのか」「数値かどうかを判定するにはどう書けばいいのか」で迷いやすいです。
この記事では、C#の数値型について、基本から文字列変換、数値判定、よくあるエラー、実践的なサンプルコードまで初心者向けにわかりやすく解説します。
1. C#の数値型とは?初心者が最初に押さえる基本
1-1. C#における「数値」と「数値型」の意味
C#における数値とは、計算や比較に使える値のことです。
たとえば、次のような値が数値です。
C#10
-5
3.14
1000
0.08
C#では、数値を扱うときに「型」を指定します。型とは、その値がどのような種類のデータなのかを表すものです。
たとえば、整数を扱うなら int、小数を扱うなら double、金額のように正確さが重要な小数を扱うなら decimal を使います。
C#int age = 25;
double height = 170.5;
decimal price = 1200.50m;
このように、C#の数値は「どの数値型で扱うか」を意識することが大切です。
1-2. 数値型が必要になる場面
C#で数値型が必要になる場面は多くあります。
たとえば、商品の個数を管理する場合は整数が必要です。
C#int count = 5;
身長や体重のように小数を含む値を扱う場合は、小数を扱える型が必要です。
C#double weight = 62.5;
商品の価格や消費税など、金額を正確に計算したい場合は decimal が向いています。
C#decimal price = 1000m;
decimal taxRate = 0.10m;
decimal total = price * (1 + taxRate);
このように、C# 数値の扱いでは「何を表す数値なのか」によって適切な型を選びます。
1-3. 整数型・浮動小数点型・decimal型の大きな違い
C#の数値型は、大きく分けると次の3種類があります。
整数型は、小数点を含まない数値を扱います。
C#int number = 100;
浮動小数点型は、小数を扱います。代表的な型は float と double です。
C#double rate = 0.15;
decimal 型も小数を扱いますが、金額計算など誤差をできるだけ避けたい場面で使われます。
C#decimal amount = 999.99m;
ざっくり覚えるなら、整数は int、一般的な小数は double、お金は decimal と考えるとわかりやすいです。
1-4. 変数宣言と数値の代入方法
C#で数値を使うには、まず変数を宣言して値を代入します。
C#int score = 80;
double temperature = 36.5;
decimal salary = 250000.00m;
decimal の値には末尾に m または M を付けます。
C#decimal price = 1980.50m;
float の値には末尾に f または F を付けます。
C#float ratio = 0.5f;
double は小数の標準的な型として扱われるため、通常は suffix を付けなくても使えます。
C#double value = 3.14;
2. C#の主な数値型一覧
2-1. 整数を扱う型:byte・short・int・long
C#で整数を扱う主な型には、byte、short、int、long があります。
C#byte smallNumber = 255;
short shortNumber = 30000;
int number = 100000;
long bigNumber = 9000000000L;
初心者が最もよく使うのは int です。通常の個数、年齢、回数、点数などは int で十分なことが多いです。
非常に大きな整数を扱う場合は long を使います。
C#long population = 125000000L;
long の値には、わかりやすくするために末尾へ L を付けることがあります。
2-2. 符号なし整数型:sbyte・ushort・uint・ulong
C#には、負の値を扱わない「符号なし整数型」もあります。
代表的な符号なし整数型は、byte、ushort、uint、ulong です。
C#ushort age = 30;
uint count = 1000U;
ulong largeValue = 10000000000UL;
注意点として、sbyte は名前に byte が含まれますが、符号付き整数型です。つまり、負の値を扱えます。
C#sbyte value = -100;
一方、byte は符号なしなので、0以上の値しか扱えません。
C#byte value = 200;
初心者のうちは、特別な理由がなければ int を使うのがわかりやすいです。符号なし整数型は、値が絶対にマイナスにならないことを明確にしたい場合や、外部仕様で型が決まっている場合に使います。
2-3. 小数を扱う型:float・double・decimal
C#で小数を扱う主な型は、float、double、decimal です。
C#float f = 3.14f;
double d = 3.14;
decimal m = 3.14m;
float はメモリ使用量が少ないですが、精度は double より低いです。
double はC#で一般的に小数を扱うときによく使われます。科学計算、割合、平均値、座標などに向いています。
decimal は10進数の計算に強く、金額や税率などの計算に向いています。
C#decimal price = 1000m;
decimal tax = 0.10m;
decimal total = price * (1 + tax);
2-4. 各数値型の範囲とサイズ一覧
C#の主な数値型のサイズと範囲は次のとおりです。
| 型 | サイズ | 扱える値の例 |
|---|---|---|
byte | 1バイト | 0 ~ 255 |
sbyte | 1バイト | -128 ~ 127 |
short | 2バイト | -32,768 ~ 32,767 |
ushort | 2バイト | 0 ~ 65,535 |
int | 4バイト | 約 -21億 ~ 約 21億 |
uint | 4バイト | 0 ~ 約 42億 |
long | 8バイト | 非常に大きな整数 |
ulong | 8バイト | 0以上の非常に大きな整数 |
float | 4バイト | 小数、精度は低め |
double | 8バイト | 小数、標準的に使われる |
decimal | 16バイト | 小数、金額計算に向く |
正確な最大値や最小値は、MaxValue と MinValue で確認できます。
C#Console.WriteLine(int.MaxValue);
Console.WriteLine(int.MinValue);
Console.WriteLine(double.MaxValue);
Console.WriteLine(decimal.MaxValue);
2-5. 初心者はまずint・double・decimalを覚えればよい理由
C# 数値型は種類が多いですが、初心者が最初からすべてを暗記する必要はありません。
まずは次の3つを覚えれば、多くの場面に対応できます。
C#int count = 10; // 整数
double average = 75.5; // 一般的な小数
decimal price = 980.50m; // 金額
int は整数、double は小数、decimal は金額と覚えると実践で迷いにくくなります。
3. int・double・decimalの違いをわかりやすく解説
3-1. int型とは?整数を扱う基本の数値型
int 型は、小数点を含まない整数を扱うための型です。
C#int age = 20;
int count = 5;
int score = 100;
int はC#で最もよく使われる数値型のひとつです。
たとえば、配列のインデックス、ループ回数、個数、年齢、点数などに使われます。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
int には小数を代入できません。
C#int value = 3.14; // エラー
小数を使いたい場合は double や decimal を使います。
3-2. double型とは?小数を扱う標準的な数値型
double 型は、小数を扱うための標準的な数値型です。
C#double height = 170.5;
double rate = 0.08;
double average = 82.75;
C#では、3.14 のような小数リテラルは基本的に double として扱われます。
C#double pi = 3.14;
double は広い範囲の小数を扱えますが、2進数で表現する都合上、10進数の小数を完全に正確に表せない場合があります。
C#double result = 0.1 + 0.2;
Console.WriteLine(result);
この結果は、期待する 0.3 と完全に一致しない場合があります。そのため、金額計算には double より decimal が向いています。
3-3. decimal型とは?金額計算に向いている数値型
decimal 型は、金額のように10進数としての正確さが重要な計算に向いています。
C#decimal price = 1000m;
decimal taxRate = 0.10m;
decimal total = price * (1 + taxRate);
Console.WriteLine(total);
decimal の値を書くときは、末尾に m を付けます。
C#decimal value = 123.45m;
m を付けないと double として扱われるため、次のコードはエラーになります。
C#decimal value = 123.45; // エラー
正しくは次のように書きます。
C#decimal value = 123.45m;
3-4. floatとdoubleの違い
float と double はどちらも小数を扱う型ですが、精度とサイズが違います。
C#float f = 3.14f;
double d = 3.14;
float は4バイトで、double は8バイトです。double のほうがより高い精度で小数を扱えます。
通常のC#アプリケーションでは、小数を扱うなら double を使うことが多いです。float は、ゲーム開発や大量の数値データを扱う場面など、メモリ効率を重視する場合に使われます。
3-5. 用途別に見る数値型の選び方
用途別に数値型を選ぶなら、次のように考えるとわかりやすいです。
| 用途 | おすすめの型 |
|---|---|
| 個数、年齢、点数、回数 | int |
| 大きな整数 | long |
| 平均、割合、座標、測定値 | double |
| 金額、税率、請求額 | decimal |
| メモリを節約したい小数 | float |
初心者のうちは、迷ったら次の基準で選びましょう。
C#int quantity = 3;
double rate = 0.75;
decimal amount = 1500.00m;
整数なら int、一般的な小数なら double、金額なら decimal です。
4. C#で数値を計算する基本
4-1. 足し算・引き算・掛け算・割り算の書き方
C#では、数値計算に算術演算子を使います。
C#int a = 10;
int b = 3;
Console.WriteLine(a + b); // 足し算
Console.WriteLine(a - b); // 引き算
Console.WriteLine(a * b); // 掛け算
Console.WriteLine(a / b); // 割り算
小数を含む計算もできます。
C#double x = 10.0;
double y = 3.0;
Console.WriteLine(x / y);
金額計算では decimal を使います。
C#decimal price = 1200m;
decimal taxRate = 0.10m;
decimal total = price * (1 + taxRate);
Console.WriteLine(total);
4-2. 余りを求める演算子
余りを求めるには % 演算子を使います。
C#int result = 10 % 3;
Console.WriteLine(result); // 1
偶数・奇数の判定にもよく使われます。
C#int number = 8;
if (number % 2 == 0)
{
Console.WriteLine("偶数です");
}
else
{
Console.WriteLine("奇数です");
}
4-3. int同士の割り算で小数が切り捨てられる理由
C#では、int 同士を割り算すると結果も int になります。そのため、小数部分は切り捨てられます。
C#int a = 10;
int b = 3;
int result = a / b;
Console.WriteLine(result); // 3
小数の結果がほしい場合は、どちらか一方を double にします。
C#int a = 10;
int b = 3;
double result = (double)a / b;
Console.WriteLine(result); // 3.333...
または、最初から double 型で宣言します。
C#double a = 10;
double b = 3;
Console.WriteLine(a / b);
4-4. インクリメント・デクリメントの使い方
数値を1増やすには ++、1減らすには -- を使います。
C#int count = 0;
count++;
Console.WriteLine(count); // 1
count--;
Console.WriteLine(count); // 0
ループ処理ではよく使われます。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
count++ は count = count + 1 と同じ意味です。
C#count = count + 1;
4-5. 数値計算でよくある注意点
C#の数値計算では、型の違いに注意が必要です。
たとえば、int 同士の割り算では小数が切り捨てられます。
C#Console.WriteLine(5 / 2); // 2
小数として計算したい場合は、double を使います。
C#Console.WriteLine(5.0 / 2); // 2.5
また、double は小数の誤差が発生することがあります。
C#double value = 0.1 + 0.2;
Console.WriteLine(value);
金額計算では decimal を使いましょう。
C#decimal value = 0.1m + 0.2m;
Console.WriteLine(value); // 0.3
5. C#の数値型の変換方法
5-1. 暗黙的な型変換とは
暗黙的な型変換とは、C#が自動で型を変換してくれることです。
小さい範囲の型から大きい範囲の型へ変換する場合は、暗黙的に変換できます。
C#int number = 100;
long bigNumber = number;
int から double への変換も可能です。
C#int count = 10;
double value = count;
このように、情報が失われにくい変換は自動で行われます。
5-2. 明示的な型変換とは
明示的な型変換とは、開発者が「この型に変換する」と明確に書く変換です。
大きい範囲の型から小さい範囲の型へ変換する場合や、小数を整数に変換する場合は、明示的な変換が必要です。
C#double value = 3.14;
int number = (int)value;
Console.WriteLine(number); // 3
この場合、小数部分は切り捨てられます。
5-3. キャストを使った数値型の変換
キャストを使うと、数値型を別の数値型へ変換できます。
C#double d = 123.45;
int i = (int)d;
Console.WriteLine(i); // 123
long を int に変換することもできます。
C#long big = 1000L;
int number = (int)big;
ただし、変換先の型で扱える範囲を超えている場合、意図しない値になる可能性があります。
C#long big = 3000000000L;
int number = (int)big;
Console.WriteLine(number);
安全に扱いたい場合は、範囲を確認してから変換しましょう。
5-4. Convertクラスを使った変換
Convert クラスを使って数値型を変換することもできます。
C#double d = 123.45;
int i = Convert.ToInt32(d);
Console.WriteLine(i);
Convert.ToInt32 は、double を int に変換できます。ただし、キャストとは違い、丸め処理が行われる点に注意が必要です。
C#Console.WriteLine((int)1.9); // 1
Console.WriteLine(Convert.ToInt32(1.9)); // 2
文字列から数値への変換にも使えます。
C#string text = "123";
int number = Convert.ToInt32(text);
5-5. 型変換で発生しやすい桁落ち・オーバーフロー
型変換では、桁落ちやオーバーフローに注意が必要です。
小数を整数へ変換すると、小数部分が失われることがあります。
C#double value = 123.99;
int number = (int)value;
Console.WriteLine(number); // 123
また、変換先の型で扱える範囲を超えると、オーバーフローが発生する場合があります。
C#long big = 9999999999L;
int number = Convert.ToInt32(big); // OverflowException
安全に変換したい場合は、値の範囲を確認するか、TryParse を使って変換できるか確認しましょう。
6. C#で数値と文字列を変換する方法
6-1. 数値を文字列に変換するToString
数値を文字列に変換するには、ToString メソッドを使います。
C#int number = 123;
string text = number.ToString();
Console.WriteLine(text);
double や decimal でも同じように使えます。
C#double rate = 0.75;
string rateText = rate.ToString();
decimal price = 1200.50m;
string priceText = price.ToString();
画面表示やログ出力では、数値を文字列に変換する場面がよくあります。
6-2. 文字列をintに変換するint.Parse
文字列を int に変換するには、int.Parse を使います。
C#string text = "123";
int number = int.Parse(text);
Console.WriteLine(number);
ただし、数値に変換できない文字列を渡すとエラーになります。
C#string text = "abc";
int number = int.Parse(text); // FormatException
ユーザー入力のように、数値以外が入力される可能性がある場合は、int.Parse より int.TryParse が安全です。
6-3. 文字列をdoubleに変換するdouble.Parse
文字列を double に変換するには、double.Parse を使います。
C#string text = "3.14";
double value = double.Parse(text);
Console.WriteLine(value);
小数を含む文字列を数値として扱いたい場合に使います。
C#string input = "170.5";
double height = double.Parse(input);
ただし、文字列の形式が正しくない場合は FormatException が発生します。
C#double value = double.Parse("abc"); // FormatException
6-4. Convert.ToInt32との違い
int.Parse と Convert.ToInt32 は、どちらも文字列を整数に変換できます。
C#string text = "123";
int a = int.Parse(text);
int b = Convert.ToInt32(text);
大きな違いのひとつは、null を渡したときの挙動です。
C#string text = null;
int a = Convert.ToInt32(text); // 0
int b = int.Parse(text); // エラー
Convert.ToInt32(null) は 0 を返しますが、int.Parse(null) は例外になります。
ただし、空文字はどちらでも変換できません。
C#Convert.ToInt32(""); // FormatException
int.Parse(""); // FormatException
安全性を重視するなら、TryParse を使うのがおすすめです。
6-5. 数値を指定形式で文字列化する方法
ToString では、表示形式を指定できます。
C#int number = 1234567;
Console.WriteLine(number.ToString("N0"));
小数点以下の桁数を指定することもできます。
C#double value = 3.14159;
Console.WriteLine(value.ToString("F2")); // 3.14
金額のように表示したい場合は、通貨形式を使えます。
C#decimal price = 1200m;
Console.WriteLine(price.ToString("C"));
6-6. カンマ区切り・小数点桁数・通貨形式の表示
数値を見やすく表示するには、書式指定が便利です。
C#int number = 1234567;
Console.WriteLine(number.ToString("N0")); // 1,234,567
小数点以下2桁で表示する場合は、F2 を使います。
C#double value = 123.4567;
Console.WriteLine(value.ToString("F2")); // 123.46
通貨形式で表示する場合は、C を使います。
C#decimal price = 1980m;
Console.WriteLine(price.ToString("C"));
実行環境のカルチャ設定によって、円記号やカンマ、小数点の表示が変わることがあります。日本向けの表示を意識する場合は、カルチャを指定する方法もあります。
C#using System.Globalization;
decimal price = 1980m;
Console.WriteLine(price.ToString("C", CultureInfo.GetCultureInfo("ja-JP")));
7. 文字列が数値かどうか判定する方法
7-1. TryParseを使って安全に数値判定する
文字列が数値かどうかを判定するには、TryParse を使うのが基本です。
C#string input = "123";
bool success = int.TryParse(input, out int number);
if (success)
{
Console.WriteLine($"数値です: {number}");
}
else
{
Console.WriteLine("数値ではありません");
}
TryParse は、変換に成功した場合は true、失敗した場合は false を返します。例外を発生させずに判定できるため、ユーザー入力チェックに向いています。
7-2. int.TryParseで整数か判定する
整数かどうかを判定するには、int.TryParse を使います。
C#string input = "100";
if (int.TryParse(input, out int number))
{
Console.WriteLine("整数です");
}
else
{
Console.WriteLine("整数ではありません");
}
小数の文字列は、int.TryParse では基本的に失敗します。
C#string input = "3.14";
bool result = int.TryParse(input, out int number);
Console.WriteLine(result); // False
整数だけを受け付けたい場合に便利です。
7-3. double.TryParseで小数を判定する
小数を含む数値かどうかを判定するには、double.TryParse を使います。
C#string input = "3.14";
if (double.TryParse(input, out double value))
{
Console.WriteLine("数値です");
}
else
{
Console.WriteLine("数値ではありません");
}
double.TryParse は整数も小数も変換できます。
C#double.TryParse("100", out double a); // 成功
double.TryParse("3.14", out double b); // 成功
測定値、割合、平均値などを入力チェックするときに使いやすいです。
7-4. decimal.TryParseで金額入力を判定する
金額の入力チェックには、decimal.TryParse が向いています。
C#string input = "1980.50";
if (decimal.TryParse(input, out decimal price))
{
Console.WriteLine($"金額: {price}");
}
else
{
Console.WriteLine("金額として正しくありません");
}
金額計算では double より decimal を使うほうが適しています。
C#decimal price = 1000m;
decimal taxRate = 0.10m;
decimal total = price * (1 + taxRate);
入力値を金額として扱うなら、判定も変換も decimal.TryParse を使うとよいでしょう。
7-5. ParseとTryParseの違い
Parse と TryParse の違いは、変換に失敗したときの動きです。
Parse は、変換できない場合に例外を発生させます。
C#int number = int.Parse("abc"); // FormatException
TryParse は、変換できない場合でも例外を発生させず、false を返します。
C#bool result = int.TryParse("abc", out int number);
Console.WriteLine(result); // False
ユーザー入力や外部ファイルの読み込みなど、正しい数値が来るとは限らない場面では TryParse を使うのが安全です。
7-6. 正規表現で数値判定する場合の注意点
正規表現を使って数値判定することもできます。
C#using System.Text.RegularExpressions;
string input = "123";
bool isNumber = Regex.IsMatch(input, @"^\d+$");
この例では、半角数字だけの文字列を判定しています。
ただし、正規表現だけで数値判定をすると、マイナス、小数点、カンマ、全角数字、カルチャによる違いなどを考慮する必要があります。
C#-123
3.14
1,000
123
このようなケースをすべて正規表現で正しく扱うのは意外と大変です。
実際にC#で数値として使いたいなら、基本的には TryParse を使うのがおすすめです。
8. C#の数値型でよくあるエラーと対処法
8-1. FormatExceptionが起きる原因
FormatException は、文字列の形式が数値として正しくないときに発生します。
C#int number = int.Parse("abc"); // FormatException
空文字も数値として変換できません。
C#int number = int.Parse(""); // FormatException
対処法としては、TryParse を使います。
C#string input = "abc";
if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値に変換できません");
}
8-2. OverflowExceptionが起きる原因
OverflowException は、変換先の型で扱える範囲を超えた値を変換しようとしたときに発生します。
C#int number = int.Parse("99999999999999999999"); // OverflowException
int で扱える範囲を超える可能性がある場合は、long を使うことを検討します。
C#long number = long.Parse("9999999999");
安全に判定するなら、TryParse を使います。
C#string input = "99999999999999999999";
if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("intの範囲外、または数値ではありません");
}
8-3. Nullや空文字を数値変換するときの注意点
null や空文字を数値に変換するときは注意が必要です。
C#string text1 = null;
string text2 = "";
int.Parse(null) はエラーになります。
C#int.Parse(text1); // エラー
Convert.ToInt32(null) は 0 を返します。
C#int number = Convert.ToInt32(text1); // 0
ただし、空文字は Convert.ToInt32 でも変換できません。
C#Convert.ToInt32(text2); // FormatException
入力値が null または空文字の可能性がある場合は、事前にチェックしましょう。
C#if (!string.IsNullOrWhiteSpace(text2) && int.TryParse(text2, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("有効な数値ではありません");
}
8-4. 小数点やカンマを含む文字列の変換エラー
文字列に小数点やカンマが含まれる場合、型や書式によって変換できないことがあります。
C#int.Parse("3.14"); // FormatException
小数を扱うなら double.Parse や decimal.Parse を使います。
C#double value = double.Parse("3.14");
カンマ区切りの数値は、スタイルを指定して変換することがあります。
C#using System.Globalization;
string input = "1,234";
int number = int.Parse(input, NumberStyles.AllowThousands);
Console.WriteLine(number);
ただし、ユーザー入力では不正な形式が混ざることがあるため、TryParse を使うほうが安全です。
C#using System.Globalization;
string input = "1,234";
if (int.TryParse(input, NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("変換できません");
}
8-5. 例外を避ける安全な書き方
数値変換で例外を避けたい場合は、TryParse を使う書き方が基本です。
C#string input = "123";
if (int.TryParse(input, out int number))
{
Console.WriteLine($"変換成功: {number}");
}
else
{
Console.WriteLine("変換失敗");
}
金額なら decimal.TryParse を使います。
C#string input = "1980";
if (decimal.TryParse(input, out decimal price))
{
Console.WriteLine($"価格: {price}");
}
else
{
Console.WriteLine("価格が正しくありません");
}
Parse は、値が必ず正しいとわかっている場合に使い、ユーザー入力には TryParse を使うと覚えておくと安心です。
9. 実践で使えるC#数値処理のサンプルコード
9-1. 入力された文字列を数値に変換する
ユーザーが入力した文字列を整数に変換する例です。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"あなたの年齢は{age}歳です");
}
else
{
Console.WriteLine("年齢は整数で入力してください");
}
Console.ReadLine の戻り値は文字列です。そのため、計算や比較に使うには数値型へ変換する必要があります。
9-2. 数値かどうか判定して条件分岐する
入力された値が数値かどうかを判定し、結果によって処理を分ける例です。
C#Console.Write("点数を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int score))
{
if (score >= 80)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
}
else
{
Console.WriteLine("数値を入力してください");
}
このように、TryParse と if を組み合わせると、入力チェックと条件分岐を安全に書けます。
9-3. int・double・decimalを使い分ける
int、double、decimal を用途に応じて使い分ける例です。
C#int quantity = 3;
double weight = 2.5;
decimal price = 1200m;
Console.WriteLine($"個数: {quantity}");
Console.WriteLine($"重さ: {weight}kg");
Console.WriteLine($"価格: {price}円");
個数は整数なので int、重さは小数を含むので double、価格は金額なので decimal を使っています。
型の選び方を意識することで、読みやすく安全なコードになります。
9-4. 金額を計算して表示する
商品の単価、個数、消費税率から合計金額を計算する例です。
C#decimal unitPrice = 1200m;
int quantity = 3;
decimal taxRate = 0.10m;
decimal subtotal = unitPrice * quantity;
decimal tax = subtotal * taxRate;
decimal total = subtotal + tax;
Console.WriteLine($"小計: {subtotal:N0}円");
Console.WriteLine($"消費税: {tax:N0}円");
Console.WriteLine($"合計: {total:N0}円");
金額計算では decimal を使うことで、10進数として扱いやすくなります。
表示では N0 を使って、カンマ区切りで小数点なしの形式にしています。
9-5. ユーザー入力チェックを実装する
金額入力をチェックし、正しい場合だけ計算する例です。
C#Console.Write("商品価格を入力してください: ");
string input = Console.ReadLine();
if (decimal.TryParse(input, out decimal price) && price >= 0)
{
decimal taxRate = 0.10m;
decimal total = price * (1 + taxRate);
Console.WriteLine($"税込価格: {total:N0}円");
}
else
{
Console.WriteLine("0以上の正しい金額を入力してください");
}
このコードでは、次の2つを確認しています。
C#decimal.TryParse(input, out decimal price)
price >= 0
数値に変換できることと、0以上であることを確認してから計算しています。
10. C#の数値型に関するよくある質問
10-1. intとIntegerの違いは?
C#では、整数を扱う基本的な型は int です。
C#int number = 10;
int は System.Int32 の別名です。
C#System.Int32 number = 10;
つまり、C#では int と System.Int32 は同じ意味で使えます。
一方、Integer はVisual Basicなどで使われる型名です。C#では通常 Integer ではなく int を使います。
10-2. doubleとdecimalはどちらを使うべき?
一般的な小数計算なら double を使うことが多いです。
C#double average = 75.5;
double distance = 12.34;
金額計算なら decimal を使うのがおすすめです。
C#decimal price = 1000m;
decimal tax = 0.10m;
double は広い範囲の数値を高速に扱えますが、小数の誤差が発生することがあります。
decimal は金額のような10進数の計算に向いていますが、double より処理コストは高めです。
迷った場合は、金額なら decimal、それ以外の一般的な小数なら double と考えるとよいでしょう。
10-3. 文字列を数値に変換できないのはなぜ?
文字列を数値に変換できない主な理由は、文字列の形式が数値として正しくないためです。
C#int.Parse("abc"); // 変換できない
int.Parse(""); // 変換できない
int.Parse("3.14"); // intには変換できない
整数に変換したいなら、整数として正しい文字列が必要です。
C#int number = int.Parse("123");
小数に変換したいなら、double.Parse や decimal.Parse を使います。
C#double value = double.Parse("3.14");
安全に判定したい場合は、TryParse を使いましょう。
C#if (int.TryParse("123", out int number))
{
Console.WriteLine(number);
}
10-4. 数値型の最大値・最小値を確認するには?
数値型の最大値や最小値は、MaxValue と MinValue で確認できます。
C#Console.WriteLine(int.MaxValue);
Console.WriteLine(int.MinValue);
Console.WriteLine(long.MaxValue);
Console.WriteLine(long.MinValue);
Console.WriteLine(decimal.MaxValue);
Console.WriteLine(decimal.MinValue);
実行すると、それぞれの型で扱える範囲を確認できます。
型変換や入力チェックを行うときに、最大値・最小値を知っておくとエラーを防ぎやすくなります。
10-5. 初心者がまず覚えるべき数値型はどれ?
初心者がまず覚えるべき数値型は、int、double、decimal の3つです。
C#int count = 10;
double average = 82.5;
decimal price = 1980m;
int は整数、double は一般的な小数、decimal は金額と覚えましょう。
この3つを使えるようになれば、C#の数値処理の多くに対応できます。その後、必要に応じて long、float、byte などを学ぶとスムーズです。
まとめ
C#の数値型は、扱う値の種類によって使い分けることが大切です。
整数を扱うなら int、一般的な小数を扱うなら double、金額を扱うなら decimal を使うのが基本です。
C#int quantity = 5;
double rate = 0.75;
decimal price = 1200m;
また、文字列を数値に変換するときは、Parse、Convert、TryParse の違いを理解しておく必要があります。
特にユーザー入力を扱う場合は、例外を避けるために TryParse を使うのがおすすめです。
C#if (int.TryParse("123", out int number))
{
Console.WriteLine(number);
}
C# 数値の扱いで重要なのは、型の特徴を理解し、用途に合った型を選ぶことです。
最初はすべての数値型を完璧に覚える必要はありません。まずは int、double、decimal をしっかり押さえ、計算、変換、判定の基本を身につけていきましょう。

