C#で桁数を取得・指定する方法|数値・文字列の桁数チェックと0埋めまで解説
はじめに
C#で数値や文字列を扱うとき、「桁数」を取得したい場面はよくあります。たとえば、入力された郵便番号が7桁か確認したい、商品番号を「000123」のように0埋めしたい、金額をカンマ区切りで表示したい、小数点以下を2桁にそろえたい、といったケースです。
C#では、桁数の扱い方が「数値として扱うのか」「文字列として扱うのか」によって変わります。単純に桁数を数えるだけならToString().Lengthで対応できますが、先頭の0を保持したい場合や、小数点以下の桁数を指定したい場合は、用途に合った方法を選ぶ必要があります。
この記事では、C#で桁数を取得する方法、指定する方法、チェックする方法、0埋めして表示をそろえる方法まで、実用的なコード例を交えて解説します。
1. C#で「桁数」を扱う前に知っておきたい基本
1-1. C#における桁数とは何か
C#でいう「桁数」は、主に数値や文字列の長さを表すときに使われます。
たとえば、数値12345の桁数は5桁です。
C#int number = 12345;
Console.WriteLine(number.ToString().Length);
実行結果は次のようになります。
C#5
ただし、C#では数値型と文字列型で桁数の考え方が異なります。数値としての桁数を知りたいのか、入力された文字列の文字数を知りたいのかを最初に分けて考えることが大切です。
1-2. 数値の桁数と文字列の文字数の違い
数値の桁数と文字列の文字数は似ていますが、同じではありません。
たとえば、次のような文字列があります。
C#string code = "00123";
Console.WriteLine(code.Length);
この場合、実行結果は次のようになります。
C#5
文字列"00123"は5文字です。
一方で、これを数値に変換すると先頭の0は消えます。
C#int number = int.Parse("00123");
Console.WriteLine(number);
Console.WriteLine(number.ToString().Length);
実行結果は次のようになります。
C#123
3
数値として扱うと00123ではなく123になります。そのため、会員番号、商品コード、郵便番号、IDのように先頭の0が意味を持つデータは、数値ではなく文字列として扱うのが基本です。
1-3. 桁数を「取得」「指定」「チェック」する主な場面
C#で桁数を扱う場面は、大きく次の3つに分けられます。
桁数を取得する場面では、数値や文字列が何桁あるかを調べます。
C#int number = 1234;
int digitCount = number.ToString().Length;
桁数を指定する場面では、表示するときの桁数や小数点以下の桁数をそろえます。
C#int number = 12;
string result = number.ToString("D5");
Console.WriteLine(result);
実行結果は次のようになります。
C#00012
桁数をチェックする場面では、入力値が指定した桁数かどうかを判定します。
C#string zipCode = "1234567";
if (zipCode.Length == 7)
{
Console.WriteLine("7桁です");
}
このように、C#の桁数処理は、入力チェックや表示フォーマットで頻繁に使われます。
1-4. int・long・decimal・stringで桁数の扱いが変わる理由
C#には、int、long、decimal、stringなど複数の型があります。それぞれ役割が違うため、桁数の扱い方も変わります。
intは整数を扱う型です。小さめの整数を扱う場合によく使われます。
C#int value = 12345;
longはintより大きな整数を扱えます。
C#long value = 1234567890123;
decimalは金額など、小数を正確に扱いたい場面でよく使われます。
C#decimal price = 1234.56m;
stringは文字列を扱います。先頭の0を保持したい場合や、入力値の桁数チェックではstringがよく使われます。
C#string code = "000123";
桁数を調べるだけならどの型でもToString()を使えますが、用途に応じて適切な型を選ばないと、先頭の0が消えたり、小数点やマイナス記号を桁数に含めてしまったりすることがあります。
2. C#で数値の桁数を取得する方法
2-1. ToString().Lengthで数値の桁数を取得する
C#で数値の桁数を取得するもっとも簡単な方法は、数値を文字列に変換してLengthプロパティを使う方法です。
C#int number = 12345;
int digitCount = number.ToString().Length;
Console.WriteLine(digitCount);
実行結果は次のようになります。
C#5
ToString()で数値を文字列に変換し、その文字数をLengthで取得しています。
longでも同じように使えます。
C#long number = 1234567890123;
int digitCount = number.ToString().Length;
Console.WriteLine(digitCount);
実行結果は次のようになります。
C#13
この方法はシンプルでわかりやすいため、C#で桁数を取得したい場合によく使われます。
ただし、負の数の場合はマイナス記号も文字数に含まれるため注意が必要です。
C#int number = -12345;
Console.WriteLine(number.ToString().Length);
実行結果は次のようになります。
C#6
-12345は、数字部分は5桁ですが、文字列としてはマイナス記号を含めて6文字です。
2-2. Math.Log10を使って数値の桁数を求める
数値の桁数は、Math.Log10を使って求めることもできます。
C#int number = 12345;
int digitCount = (int)Math.Floor(Math.Log10(number)) + 1;
Console.WriteLine(digitCount);
実行結果は次のようになります。
C#5
Math.Log10は10を底とする対数を求めるメソッドです。正の整数であれば、次のような式で桁数を計算できます。
C#int digitCount = (int)Math.Floor(Math.Log10(number)) + 1;
ただし、この方法は0や負の数にはそのまま使えません。Math.Log10(0)は通常の桁数計算として扱えないため、別途分岐が必要です。
C#int number = 0;
int digitCount = number == 0
? 1
: (int)Math.Floor(Math.Log10(Math.Abs(number))) + 1;
Console.WriteLine(digitCount);
実行結果は次のようになります。
C#1
Math.Log10を使う方法は、数値計算として桁数を求めたい場合に使えますが、通常のアプリケーションではToString().Lengthのほうが読みやすく扱いやすいです。
2-3. 0の桁数を正しく扱う方法
数値0の桁数は1桁として扱うのが一般的です。
C#int number = 0;
int digitCount = number.ToString().Length;
Console.WriteLine(digitCount);
実行結果は次のようになります。
C#1
ToString().Lengthを使えば、0は文字列"0"になるため、自然に1桁として取得できます。
一方、Math.Log10を使う場合は、0を特別に処理する必要があります。
C#int number = 0;
int digitCount;
if (number == 0)
{
digitCount = 1;
}
else
{
digitCount = (int)Math.Floor(Math.Log10(Math.Abs(number))) + 1;
}
Console.WriteLine(digitCount);
0の扱いを忘れると、正しい桁数が取得できないことがあります。桁数取得の処理をメソッド化する場合も、0の分岐は必ず入れておくと安心です。
2-4. 負の数の桁数を取得する場合の注意点
負の数の桁数を取得する場合、マイナス記号を桁数に含めるかどうかを決める必要があります。
たとえば、-1234を数字部分だけで考えれば4桁です。しかし、文字列として考えると"-1234"なので5文字です。
数字部分だけの桁数を取得する場合は、絶対値にしてから桁数を取得します。
C#int number = -1234;
int digitCount = Math.Abs(number).ToString().Length;
Console.WriteLine(digitCount);
実行結果は次のようになります。
C#4
ただし、int.MinValueのような最小値ではMath.Absを使うと扱いに注意が必要です。より安全に処理したい場合は、文字列に変換してマイナス記号を取り除く方法もあります。
C#int number = -1234;
string text = number.ToString().TrimStart('-');
Console.WriteLine(text.Length);
実行結果は次のようになります。
C#4
この方法なら、マイナス記号を桁数に含めずに数字部分だけを数えられます。
2-5. 小数の桁数を取得する方法
小数の桁数を取得する場合は、「整数部分の桁数」を取得したいのか、「小数点以下の桁数」を取得したいのかを分けて考えます。
整数部分の桁数を取得する場合は、小数点より前の部分を数えます。
C#decimal number = 1234.56m;
string integerPart = Math.Truncate(number).ToString();
Console.WriteLine(integerPart.Length);
実行結果は次のようになります。
C#4
小数点以下の桁数を文字列から取得する場合は、.で分割します。
C#decimal number = 1234.56m;
string text = number.ToString();
int decimalDigits = 0;
if (text.Contains("."))
{
decimalDigits = text.Split('.')[1].Length;
}
Console.WriteLine(decimalDigits);
実行結果は次のようになります。
C#2
ただし、実行環境のカルチャによって小数点の記号が.ではなく,になる場合があります。より厳密に処理したい場合は、CultureInfo.InvariantCultureを使って文字列化すると安定します。
C#using System.Globalization;
decimal number = 1234.56m;
string text = number.ToString(CultureInfo.InvariantCulture);
int decimalDigits = 0;
if (text.Contains("."))
{
decimalDigits = text.Split('.')[1].Length;
}
Console.WriteLine(decimalDigits);
小数の桁数を扱う場合は、表示上の桁数なのか、入力値としての桁数なのかを明確にしておくことが重要です。
2-6. int・longなど型ごとの桁数取得サンプル
int、long、decimalなど、型ごとの桁数取得サンプルを見てみましょう。
まずはintです。
C#int value = 12345;
int digits = value.ToString().Length;
Console.WriteLine(digits);
実行結果は次のようになります。
C#5
次にlongです。
C#long value = 123456789012345;
int digits = value.ToString().Length;
Console.WriteLine(digits);
実行結果は次のようになります。
C#15
decimalで整数部分の桁数を取得する例です。
C#decimal value = 12345.67m;
string integerPart = Math.Truncate(value).ToString();
Console.WriteLine(integerPart.Length);
実行結果は次のようになります。
C#5
負の値で数字部分だけを数える場合は、マイナス記号を除外します。
C#int value = -9876;
int digits = value.ToString().TrimStart('-').Length;
Console.WriteLine(digits);
実行結果は次のようになります。
C#4
C#で数値の桁数を取得する場合、基本はToString().Lengthで十分です。負の数、小数、0などを扱う場合だけ、必要に応じて条件分岐を追加しましょう。
3. C#で文字列の桁数を取得・チェックする方法
3-1. Lengthプロパティで文字列の桁数を取得する
C#で文字列の桁数、つまり文字数を取得するには、Lengthプロパティを使います。
C#string value = "12345";
int length = value.Length;
Console.WriteLine(length);
実行結果は次のようになります。
C#5
文字列の場合、先頭の0もそのまま数えられます。
C#string value = "00123";
Console.WriteLine(value.Length);
実行結果は次のようになります。
C#5
郵便番号、電話番号、商品コード、会員番号などは、数値ではなく文字列として扱うことが多いです。これは、先頭の0が消えるとデータの意味が変わってしまうためです。
3-2. 入力値が指定桁数か判定する方法
入力値が指定した桁数かどうかを判定するには、Lengthと比較します。
C#string input = "1234567";
if (input.Length == 7)
{
Console.WriteLine("7桁です");
}
else
{
Console.WriteLine("7桁ではありません");
}
実行結果は次のようになります。
C#7桁です
メソッドにすると再利用しやすくなります。
C#static bool IsLength(string value, int length)
{
return value != null && value.Length == length;
}
Console.WriteLine(IsLength("1234567", 7));
Console.WriteLine(IsLength("12345", 7));
実行結果は次のようになります。
C#True
False
nullの可能性がある場合は、value != nullのようにチェックしてからLengthを使うと安全です。
3-3. 指定桁数以上・以下をチェックする方法
指定桁数以上かどうかを判定する場合は、>=を使います。
C#string password = "abcdef12";
if (password.Length >= 8)
{
Console.WriteLine("8文字以上です");
}
指定桁数以下かどうかを判定する場合は、<=を使います。
C#string name = "Taro";
if (name.Length <= 10)
{
Console.WriteLine("10文字以内です");
}
入力フォームでは、最小桁数と最大桁数を同時にチェックすることもよくあります。
C#string userId = "abc123";
if (userId.Length >= 4 && userId.Length <= 12)
{
Console.WriteLine("有効な桁数です");
}
else
{
Console.WriteLine("4文字以上12文字以内で入力してください");
}
このように、文字列の桁数チェックではLengthと比較演算子を組み合わせるだけで、多くのケースに対応できます。
3-4. 数字だけの文字列かチェックする方法
文字列の桁数をチェックするときは、「指定桁数であること」だけでなく、「数字だけで構成されていること」も確認したい場合があります。
char.IsDigitを使うと、文字列内の各文字が数字かどうかを判定できます。
C#string input = "1234567";
bool isDigitsOnly = input.All(char.IsDigit);
Console.WriteLine(isDigitsOnly);
実行結果は次のようになります。
C#True
Allを使うには、System.Linqが必要です。
C#using System.Linq;
指定桁数かつ数字のみかをチェックする例は次の通りです。
C#using System.Linq;
string input = "1234567";
bool isValid = input.Length == 7 && input.All(char.IsDigit);
if (isValid)
{
Console.WriteLine("7桁の数字です");
}
else
{
Console.WriteLine("7桁の数字ではありません");
}
ただし、char.IsDigitは全角数字も数字として判定します。半角数字だけを許可したい場合は、次のように書くとよいです。
C#string input = "1234567";
bool isHalfWidthDigitsOnly = input.All(c => c >= '0' && c <= '9');
Console.WriteLine(isHalfWidthDigitsOnly);
郵便番号や電話番号など、半角数字だけを受け付けたい場合は、c >= '0' && c <= '9'で判定する方法がわかりやすいです。
3-5. 全角文字・半角文字が含まれる場合の注意点
C#のLengthは、基本的に文字列の文字数を返します。画面上の見た目の幅やバイト数とは異なります。
たとえば、全角文字でも半角文字でも、1文字として数えられます。
C#string text1 = "ABC";
string text2 = "あいう";
Console.WriteLine(text1.Length);
Console.WriteLine(text2.Length);
実行結果は次のようになります。
C#3
3
ただし、全角文字は画面上では半角文字より広く表示されることがあります。そのため、固定幅で表示したい場合や、バイト数を制限したい場合は、Lengthだけでは不十分なことがあります。
また、絵文字や一部の特殊文字では、見た目上は1文字でもLengthでは2以上になる場合があります。通常の数字や英字、ひらがな、カタカナを扱う範囲では大きな問題になりにくいですが、入力フォームで厳密な文字数制限を行う場合は注意しましょう。
4. C#で桁数を指定して数値を表示する方法
4-1. ToStringの書式指定で桁数をそろえる
C#では、ToStringに書式指定文字列を渡すことで、数値の表示形式を指定できます。
たとえば、整数を5桁で表示したい場合は、D5を使います。
C#int number = 123;
string result = number.ToString("D5");
Console.WriteLine(result);
実行結果は次のようになります。
C#00123
小数点以下を2桁にしたい場合は、F2を使います。
C#double number = 123.456;
string result = number.ToString("F2");
Console.WriteLine(result);
実行結果は次のようになります。
C#123.46
このように、C#では書式指定を使うことで、桁数をそろえて見やすく表示できます。
4-2. D書式指定子で整数の桁数を指定する
D書式指定子は、整数を指定した桁数で表示するときに使います。足りない桁は0で埋められます。
C#int number = 42;
Console.WriteLine(number.ToString("D5"));
実行結果は次のようになります。
C#00042
D3なら3桁、D8なら8桁で表示できます。
C#int number = 7;
Console.WriteLine(number.ToString("D3"));
Console.WriteLine(number.ToString("D8"));
実行結果は次のようになります。
C#007
00000007
D書式指定子は整数専用です。intやlongなどの整数型で使います。
C#long orderId = 123456;
string displayId = orderId.ToString("D10");
Console.WriteLine(displayId);
実行結果は次のようになります。
C#0000123456
注文番号や連番を固定桁数で表示したい場合に便利です。
4-3. F書式指定子で小数点以下の桁数を指定する
F書式指定子は、小数点以下の桁数を指定するときに使います。
C#double value = 123.4567;
string result = value.ToString("F2");
Console.WriteLine(result);
実行結果は次のようになります。
C#123.46
F2は小数点以下2桁で表示する指定です。3桁目は四捨五入されます。
C#double value = 123.4;
Console.WriteLine(value.ToString("F2"));
Console.WriteLine(value.ToString("F4"));
実行結果は次のようになります。
C#123.40
123.4000
小数点以下の桁数を必ずそろえたい場合に使えます。金額、割合、測定値などを表示するときによく利用されます。
4-4. N書式指定子でカンマ区切りと小数桁数を指定する
N書式指定子は、カンマ区切りと小数点以下の桁数を指定するときに使います。
C#decimal price = 1234567.89m;
string result = price.ToString("N2");
Console.WriteLine(result);
実行結果は次のようになります。
C#1,234,567.89
N0を使うと、小数点以下なしでカンマ区切り表示にできます。
C#decimal price = 1234567.89m;
Console.WriteLine(price.ToString("N0"));
実行結果は次のようになります。
C#1,234,568
小数点以下は四捨五入されます。
N書式指定子は、金額や集計値を見やすく表示したい場合に便利です。ただし、カンマや小数点記号は実行環境のカルチャによって変わる場合があります。
4-5. string.Formatや文字列補間で桁数を指定する
ToStringだけでなく、string.Formatや文字列補間でも桁数を指定できます。
string.Formatを使う例です。
C#int number = 123;
string result = string.Format("{0:D5}", number);
Console.WriteLine(result);
実行結果は次のようになります。
C#00123
文字列補間を使うと、より読みやすく書けます。
C#int number = 123;
string result = $"{number:D5}";
Console.WriteLine(result);
実行結果は次のようになります。
C#00123
小数点以下の桁数指定も同じようにできます。
C#double rate = 0.12345;
string result = $"{rate:F2}";
Console.WriteLine(result);
実行結果は次のようになります。
C#0.12
カンマ区切りも指定できます。
C#int amount = 1234567;
string result = $"{amount:N0}";
Console.WriteLine(result);
実行結果は次のようになります。
C#1,234,567
最近のC#では、文字列補間を使うと簡潔に書けるため、表示用の桁数指定には$"{value:D5}"のような書き方がよく使われます。
5. C#で0埋めして桁数をそろえる方法
5-1. ToString("D桁数")で0埋めする
C#で数値を0埋めして表示したい場合は、ToString("D桁数")を使うのが基本です。
C#int number = 123;
string result = number.ToString("D6");
Console.WriteLine(result);
実行結果は次のようになります。
C#000123
D6は、整数を6桁で表示する指定です。元の数値が6桁に満たない場合、左側が0で埋められます。
C#int number1 = 1;
int number2 = 25;
int number3 = 999;
Console.WriteLine(number1.ToString("D4"));
Console.WriteLine(number2.ToString("D4"));
Console.WriteLine(number3.ToString("D4"));
実行結果は次のようになります。
C#0001
0025
0999
この方法は、数値を表示するときだけ0埋めしたい場合に向いています。元の数値自体が変わるわけではなく、表示用の文字列として0埋めされます。
5-2. PadLeftを使って文字列を0埋めする
文字列を0埋めしたい場合は、PadLeftを使います。
C#string code = "123";
string result = code.PadLeft(6, '0');
Console.WriteLine(result);
実行結果は次のようになります。
C#000123
PadLeft(6, '0')は、文字列の長さが6文字になるように、左側を0で埋める指定です。
すでに指定桁数に達している場合は、そのまま返されます。
C#string code = "123456";
Console.WriteLine(code.PadLeft(6, '0'));
実行結果は次のようになります。
C#123456
PadLeftは文字列に対して使うため、商品コードや会員番号など、先頭の0を保持したいデータに向いています。
5-3. 数値と文字列で0埋め方法を使い分ける
C#で0埋めする場合、数値ならToString("D桁数")、文字列ならPadLeftを使うのが基本です。
数値を0埋めする例です。
C#int number = 45;
string result = number.ToString("D5");
Console.WriteLine(result);
実行結果は次のようになります。
C#00045
文字列を0埋めする例です。
C#string code = "45";
string result = code.PadLeft(5, '0');
Console.WriteLine(result);
実行結果は次のようになります。
C#00045
どちらも結果は同じですが、目的が異なります。
数値として計算する値を表示用に0埋めするならToString("D5")が適しています。最初からコードやIDとして扱う値なら、数値に変換せずPadLeftを使うのが安全です。
5-4. 桁数を超えた場合にどう表示されるか
指定した桁数より元の数値や文字列のほうが長い場合、C#は値を切り捨てません。
C#int number = 123456;
string result = number.ToString("D4");
Console.WriteLine(result);
実行結果は次のようになります。
C#123456
D4を指定していますが、元の値が6桁なので、そのまま6桁で表示されます。
PadLeftでも同じです。
C#string code = "123456";
string result = code.PadLeft(4, '0');
Console.WriteLine(result);
実行結果は次のようになります。
C#123456
指定桁数を超える値をエラーにしたい場合は、0埋めする前に桁数チェックを行います。
C#string code = "123456";
if (code.Length > 4)
{
Console.WriteLine("桁数が多すぎます");
}
else
{
Console.WriteLine(code.PadLeft(4, '0'));
}
表示桁数をそろえるだけならそのままで問題ありませんが、固定桁数のコードとして扱う場合は、桁数超過をチェックすることが大切です。
5-5. 商品番号・会員番号・連番で使える0埋めサンプル
商品番号を6桁で表示する例です。
C#int productNumber = 123;
string productCode = productNumber.ToString("D6");
Console.WriteLine(productCode);
実行結果は次のようになります。
C#000123
会員番号を8桁で表示する例です。
C#int memberNumber = 4567;
string memberCode = memberNumber.ToString("D8");
Console.WriteLine(memberCode);
実行結果は次のようになります。
C#00004567
文字列として受け取ったIDを0埋めする例です。
C#string inputId = "789";
string formattedId = inputId.PadLeft(6, '0');
Console.WriteLine(formattedId);
実行結果は次のようになります。
C#000789
連番をファイル名に使う例です。
C#for (int i = 1; i <= 3; i++)
{
string fileName = $"image_{i:D4}.png";
Console.WriteLine(fileName);
}
実行結果は次のようになります。
C#image_0001.png
image_0002.png
image_0003.png
このように、C#の0埋めは、番号やコードの表示をそろえるときに非常に便利です。
6. C#で桁数をチェックする実践例
6-1. 郵便番号が7桁かチェックする
日本の郵便番号は、ハイフンなしなら7桁です。C#で郵便番号が7桁の数字かチェックする例を見てみましょう。
C#using System.Linq;
string zipCode = "1234567";
bool isValid = zipCode.Length == 7 && zipCode.All(c => c >= '0' && c <= '9');
if (isValid)
{
Console.WriteLine("有効な郵便番号です");
}
else
{
Console.WriteLine("郵便番号は7桁の数字で入力してください");
}
実行結果は次のようになります。
C#有効な郵便番号です
ハイフンありの形式123-4567を許可する場合は、桁数ではなく形式全体をチェックする必要があります。
C#using System.Text.RegularExpressions;
string zipCode = "123-4567";
bool isValid = Regex.IsMatch(zipCode, @"^\d{3}-\d{4}$");
Console.WriteLine(isValid);
実行結果は次のようになります。
C#True
ハイフンなしならLength == 7、ハイフンありなら正規表現を使うとわかりやすいです。
6-2. 電話番号の桁数をチェックする
電話番号は、固定電話、携帯電話、市外局番などによって桁数が変わることがあります。そのため、厳密な判定をする場合は仕様を決める必要があります。
ハイフンなしで10桁または11桁の数字を許可する例です。
C#using System.Linq;
string phoneNumber = "09012345678";
bool isDigitsOnly = phoneNumber.All(c => c >= '0' && c <= '9');
bool isValidLength = phoneNumber.Length == 10 || phoneNumber.Length == 11;
if (isDigitsOnly && isValidLength)
{
Console.WriteLine("有効な電話番号です");
}
else
{
Console.WriteLine("電話番号は10桁または11桁の数字で入力してください");
}
実行結果は次のようになります。
C#有効な電話番号です
ハイフンが含まれる場合は、先にハイフンを除去してからチェックする方法もあります。
C#using System.Linq;
string phoneNumber = "090-1234-5678";
string normalized = phoneNumber.Replace("-", "");
bool isValid = normalized.Length == 11
&& normalized.All(c => c >= '0' && c <= '9');
Console.WriteLine(isValid);
実行結果は次のようになります。
C#True
入力チェックでは、ユーザーが入力しやすい形式を許可しつつ、内部処理ではハイフンを除去して統一する方法が実用的です。
6-3. IDやコードが指定桁数かチェックする
会員IDや商品コードなどが指定桁数かどうかをチェックする例です。
C#string memberId = "A12345";
if (memberId.Length == 6)
{
Console.WriteLine("有効なIDです");
}
else
{
Console.WriteLine("IDは6桁で入力してください");
}
数字のみのIDをチェックする場合は、桁数と数字判定を組み合わせます。
C#using System.Linq;
string memberId = "001234";
bool isValid = memberId.Length == 6
&& memberId.All(c => c >= '0' && c <= '9');
Console.WriteLine(isValid);
実行結果は次のようになります。
C#True
英数字を許可したい場合は、char.IsLetterOrDigitを使えます。
C#using System.Linq;
string code = "AB1234";
bool isValid = code.Length == 6
&& code.All(char.IsLetterOrDigit);
Console.WriteLine(isValid);
実行結果は次のようになります。
C#True
ただし、char.IsLetterOrDigitは全角英数字なども対象になる場合があります。半角英数字だけに限定したい場合は、条件を明示します。
C#using System.Linq;
string code = "AB1234";
bool isValid = code.Length == 6
&& code.All(c =>
(c >= '0' && c <= '9') ||
(c >= 'A' && c <= 'Z') ||
(c >= 'a' && c <= 'z'));
Console.WriteLine(isValid);
入力仕様に合わせて、どの文字を許可するかを明確にしましょう。
6-4. 入力フォームで桁数エラーを判定する
入力フォームでは、nullや空文字も考慮して桁数チェックを行う必要があります。
C#string input = "";
if (string.IsNullOrEmpty(input))
{
Console.WriteLine("入力してください");
}
else if (input.Length != 8)
{
Console.WriteLine("8桁で入力してください");
}
else
{
Console.WriteLine("入力OKです");
}
空白だけの入力も無効にしたい場合は、string.IsNullOrWhiteSpaceを使います。
C#string input = " ";
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力してください");
}
else if (input.Length != 8)
{
Console.WriteLine("8桁で入力してください");
}
else
{
Console.WriteLine("入力OKです");
}
前後の空白を無視したい場合は、Trimしてから桁数を確認します。
C#string input = " 12345678 ";
string trimmed = input.Trim();
if (trimmed.Length == 8)
{
Console.WriteLine("8桁です");
}
フォーム入力では、ユーザーが意図せず空白を入れてしまうこともあります。桁数チェックの前に、空白の扱いを決めておくとトラブルを防げます。
6-5. TryParseと組み合わせて数値変換前にチェックする
入力値を数値に変換したい場合は、TryParseを使うと安全です。
C#string input = "12345";
if (int.TryParse(input, out int number))
{
Console.WriteLine($"数値に変換できました: {number}");
}
else
{
Console.WriteLine("数値に変換できません");
}
桁数チェックと組み合わせる場合は、先に文字列として桁数を確認します。
C#string input = "00123";
if (input.Length == 5 && int.TryParse(input, out int number))
{
Console.WriteLine("5桁の数値です");
Console.WriteLine(number);
}
else
{
Console.WriteLine("5桁の数値ではありません");
}
実行結果は次のようになります。
C#5桁の数値です
123
ここで注意したいのは、int.TryParseで数値に変換すると先頭の0が消えることです。入力値として00123を保持したい場合は、数値変換後のnumberではなく、元の文字列inputを使い続ける必要があります。
数字だけかどうかをチェックし、先頭の0も保持したい場合は、数値変換せず文字列のまま扱うほうが安全です。
C#using System.Linq;
string input = "00123";
bool isValid = input.Length == 5
&& input.All(c => c >= '0' && c <= '9');
Console.WriteLine(isValid);
7. C#で桁数を扱うときの注意点
7-1. 数値に変換すると先頭の0が消える
C#で桁数を扱うときに特に注意したいのが、先頭の0です。
C#string code = "00123";
int number = int.Parse(code);
Console.WriteLine(number);
実行結果は次のようになります。
C#123
数値型では、00123も123も同じ数値として扱われます。そのため、先頭の0は保持されません。
郵便番号、電話番号、商品コード、会員番号、銀行口座番号などは、計算するための数値ではなく識別するためのコードです。このようなデータは、基本的にstringで扱うことをおすすめします。
C#string memberCode = "00123";
Console.WriteLine(memberCode.Length);
実行結果は次のようになります。
C#5
先頭の0を意味のある情報として扱う場合、数値変換しないことが重要です。
7-2. マイナス記号を桁数に含めるか判断する
負の数を扱う場合、マイナス記号を桁数に含めるかどうかを決める必要があります。
C#int value = -123;
Console.WriteLine(value.ToString().Length);
実行結果は次のようになります。
C#4
これは-を含めた文字数です。
数字部分だけの桁数を取得したい場合は、マイナス記号を除外します。
C#int value = -123;
int digits = value.ToString().TrimStart('-').Length;
Console.WriteLine(digits);
実行結果は次のようになります。
C#3
表示文字数をチェックしたい場合はマイナス記号を含め、数値の桁数をチェックしたい場合はマイナス記号を含めない、というように用途に応じて判断しましょう。
7-3. 小数点やカンマを桁数に含めるか判断する
小数やカンマ区切りの数値を文字列として扱う場合、小数点やカンマも文字数に含まれます。
C#string value = "1,234.56";
Console.WriteLine(value.Length);
実行結果は次のようになります。
C#8
数字だけを数えたい場合は、カンマや小数点を除外する必要があります。
C#string value = "1,234.56";
string digitsOnly = value.Replace(",", "").Replace(".", "");
Console.WriteLine(digitsOnly.Length);
実行結果は次のようになります。
C#6
小数点以下の桁数だけを知りたい場合は、小数点で分割します。
C#string value = "1234.56";
int decimalDigits = value.Contains(".")
? value.Split('.')[1].Length
: 0;
Console.WriteLine(decimalDigits);
実行結果は次のようになります。
C#2
数値の見た目の文字数をチェックしたいのか、数字そのものの桁数をチェックしたいのかを明確にして処理を分けましょう。
7-4. nullや空文字の桁数チェックで例外を防ぐ
文字列の桁数をチェックするとき、対象がnullだとLengthを呼び出した時点で例外が発生します。
C#string value = null;
// これは例外になる
Console.WriteLine(value.Length);
安全にチェックするには、null確認を行います。
C#string value = null;
if (value != null && value.Length == 5)
{
Console.WriteLine("5桁です");
}
else
{
Console.WriteLine("5桁ではありません");
}
空文字も含めてチェックしたい場合は、string.IsNullOrEmptyを使います。
C#string value = "";
if (string.IsNullOrEmpty(value))
{
Console.WriteLine("値がありません");
}
else
{
Console.WriteLine(value.Length);
}
空白だけの文字列も無効にしたい場合は、string.IsNullOrWhiteSpaceを使います。
C#string value = " ";
if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("空白のみです");
}
入力チェックでは、null、空文字、空白のみの文字列をどう扱うかを決めておくことが大切です。
7-5. 桁数チェックは用途に応じて数値型と文字列型を使い分ける
C#で桁数を扱うときは、数値型と文字列型を使い分けることが重要です。
計算する値であれば、int、long、decimalなどの数値型を使います。
C#int quantity = 100;
decimal price = 1234.56m;
一方、先頭の0が意味を持つ値や、桁数そのものが重要な値はstringで扱います。
C#string zipCode = "0012345";
string memberId = "000123";
数値型に向いているものは、数量、金額、年齢、点数、回数などです。
文字列型に向いているものは、郵便番号、電話番号、商品コード、会員番号、口座番号、管理番号などです。
「数字だけで構成されているから数値型にする」と考えるのではなく、「計算する必要があるか」「先頭の0を保持する必要があるか」で判断すると、桁数に関する不具合を防ぎやすくなります。
8. C#の桁数に関するよくある質問
8-1. C#でintの桁数を取得するには?
intの桁数を取得するには、ToString().Lengthを使うのが簡単です。
C#int value = 12345;
int digits = value.ToString().Length;
Console.WriteLine(digits);
実行結果は次のようになります。
C#5
負の数でマイナス記号を含めたくない場合は、TrimStart('-')を使います。
C#int value = -12345;
int digits = value.ToString().TrimStart('-').Length;
Console.WriteLine(digits);
実行結果は次のようになります。
C#5
8-2. C#で指定桁数に0埋めするには?
数値を指定桁数に0埋めするには、ToString("D桁数")を使います。
C#int value = 123;
string result = value.ToString("D6");
Console.WriteLine(result);
実行結果は次のようになります。
C#000123
文字列を0埋めする場合は、PadLeftを使います。
C#string value = "123";
string result = value.PadLeft(6, '0');
Console.WriteLine(result);
実行結果は次のようになります。
C#000123
数値ならToString("D6")、文字列ならPadLeft(6, '0')と覚えるとよいでしょう。
8-3. C#で小数点以下の桁数を指定するには?
小数点以下の桁数を指定するには、F書式指定子を使います。
C#double value = 123.456;
string result = value.ToString("F2");
Console.WriteLine(result);
実行結果は次のようになります。
C#123.46
F2は小数点以下2桁、F3は小数点以下3桁を表します。
文字列補間でも同じ指定ができます。
C#double value = 123.456;
Console.WriteLine($"{value:F2}");
実行結果は次のようになります。
C#123.46
8-4. C#で文字列が指定桁数か判定するには?
文字列が指定桁数かどうかを判定するには、Lengthを使います。
C#string value = "123456";
if (value.Length == 6)
{
Console.WriteLine("6桁です");
}
nullの可能性がある場合は、先にnullチェックを行います。
C#static bool IsFixedLength(string value, int length)
{
return value != null && value.Length == length;
}
Console.WriteLine(IsFixedLength("123456", 6));
数字だけかどうかもチェックしたい場合は、次のように書けます。
C#using System.Linq;
string value = "123456";
bool isValid = value.Length == 6
&& value.All(c => c >= '0' && c <= '9');
Console.WriteLine(isValid);
実行結果は次のようになります。
C#True
8-5. ToStringとPadLeftはどちらを使うべき?
数値を表示用に0埋めしたい場合は、ToString("D桁数")を使うのがおすすめです。
C#int number = 123;
string result = number.ToString("D5");
文字列を0埋めしたい場合は、PadLeftを使います。
C#string code = "123";
string result = code.PadLeft(5, '0');
数値として計算する値ならToString、コードやIDのように文字列として管理する値ならPadLeftが向いています。
特に、先頭の0を保持する必要がある場合は、最初からstringで扱い、PadLeftで桁数をそろえる方法が安全です。
まとめ
C#で桁数を扱う方法は、数値と文字列で考え方が異なります。
数値の桁数を取得するだけなら、ToString().Lengthを使うのが簡単です。intやlongなどの整数型では、文字列に変換してLengthを確認すれば桁数を取得できます。ただし、負の数ではマイナス記号を含めるかどうか、0を1桁として扱うかどうかに注意が必要です。
文字列の桁数をチェックする場合は、Lengthプロパティを使います。郵便番号、電話番号、商品コード、会員番号のように先頭の0が意味を持つ値は、数値ではなく文字列として扱うことが大切です。
桁数を指定して表示したい場合は、ToStringの書式指定を使います。整数を0埋めするならD書式指定子、小数点以下の桁数を指定するならF書式指定子、カンマ区切りで表示するならN書式指定子が便利です。
また、文字列を0埋めしたい場合はPadLeftを使います。数値はToString("D桁数")、文字列はPadLeft(桁数, '0')と使い分けると、C#での桁数処理をわかりやすく実装できます。
桁数チェックでは、nullや空文字、全角文字、マイナス記号、小数点、カンマなどを含めるかどうかを事前に決めておくことが重要です。用途に応じて数値型と文字列型を正しく使い分ければ、入力チェックや表示フォーマットでの不具合を防ぎやすくなります。

