4649は何桁? §
数値の桁数を調べる方法は大ざっぱに言えば2つあります。
一つは文字列を経由する方法。
もう1つは数値計算だけで解決する方法です。
文字列を経由する方法はToStringメソッドで文字列に直した上で文字列の長さを取得します。数値の表示が指数などの特殊な表示になっても、確実に表示される文字列の長さを取得できます。しかし、文字列を経由すると効率は良くありません。
数値計算だけで解決する方法はMath.Log10メソッドで10の対数を取り、それを小数点以下切り上げる方法です。
表示に関係なく正しい幅を取得できますが、表示のために挿入される記号などを含めた幅は得られません。
どちらも一長一短です。
目的に合った方を選びましょう。
罠の数々 §
- 【数値の桁数≠表示される文字数】ということに注意しよう
- また表示される文字数は状況次第で変化することがある。たとえば、表示指定で指数表示が指定されるだけで文字数が変化するかもしれない。
参考リンク §
Math.Log10(Double) メソッド
Math.Ceiling メソッド
Math クラス
Math クラスには、対数を計算するメソッドとして、Log, Log2, Log10の三種類がある。上記リンクからそれぞれの違いを確認して誤用しないようにしよう。
リポジトリ §
https://github.com/autumn009/cshowto
NumberOfDigits §
using System;
class Program
{
static void Main()
{
var tgt = 4649;
// 方法1・文字列法
var s1 = tgt.ToString();
var width1 = s1.Length;
Console.WriteLine($"{tgt}は{width1}桁です。");
// 方法2・数値計算法
var width2raw = Math.Log10(tgt);
var width2 = Math.Ceiling(width2raw);
Console.WriteLine($"{tgt}は{width2}桁です。(切り上げ前は{width2raw}です)");
}
}
実行結果
4649は4桁です。
4649は4桁です。(切り上げ前は3.667359546183087です)