- PR -

C# 書式指定子で左詰め、下二桁表示

1
投稿者投稿内容
fuzuki
常連さん
会議室デビュー日: 2003/08/23
投稿数: 48
投稿日時: 2004-08-12 22:14
こんにちは。

件名の通り、C#の書式指定で実数部分だけを左詰めにして、下二桁表示にしたいのですが、どうもうまくいかず困っています。左詰めの処理は一番大きな桁を持っている値に合わせて、それに満たない値の場合は右に空白を埋めたいのです。

具体的には、

double num1 = 123.6789;
double num2 = 12345.6789;

のような値があった場合、
コード:
num1 123  .67
num2 12345.6789


のように表示できると良いのですが。

何桁で表すかはこの処理を行う前に一番大きな値の桁を取得してそれを書式指定の時に使用するので問題は無いと思います。問題は、左詰めの処理と下二桁表示の処理を一回でできる方法が分からないことです。

左詰めの処理は、例えば5桁の処理の場合はConsole.Write("{0,-5}", num1)のような感じでできて、下二桁表示はConsole.Write("{0:#.##}" , num)のようなものでいいと思うのですが・・・

どなたか分かる方いらっしゃいますか?または、どこかにこのような書式指定について詳しく書かれたページなどがあればそのページを教えていただけますか?
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-08-13 01:02
いつもはこの下を見ております。
提示のようなものは無かったように思いますが
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconFormattingTypes.asp

整数部と小数部にまず分離されたら望みどおりになると思いますが・・・
_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2004-08-13 02:55
こんばんは、meiです。

引用:

fuzukiさんの書き込み (2004-08-12 22:14) より:
何桁で表すかはこの処理を行う前に一番大きな値の桁を取得してそれを書式指定の時に使用するので問題は無いと思います。問題は、左詰めの処理と下二桁表示の処理を一回でできる方法が分からないことです。


一回で処理するのは難しい気がします。ちょっと考えてみましたけど、あまりいい方法が思いつきませんでした。

コード:
using System;
using System.Text.RegularExpressions;

class Program
{
	static string Format(string s, int len) {
		Match m;
		m = Regex.Match(s, @"(\d+)\.?(\d{0,2})");
		return m.Groups[1].Value.PadRight(len)+"."+m.Groups[2].Value.PadRight(2, '0');
	}

	static void Main(string[] args)
	{
		double num1 = 123.6789;
		double num2 = 12345.6789; 
		double num3 = 1.2;			// 小数部が2桁に満たない
		int num4 = 1;				// 整数
		string s;

		// 整数部が最大なので、これにあわせる
		s = num2.ToString();
		int len = s.IndexOf('.');
		if (len < 0)
			len = s.Length;

		Console.WriteLine(Format(num1.ToString(), len));
		Console.WriteLine(Format(num2.ToString(), len));
		Console.WriteLine(Format(num3.ToString(), len));
		Console.WriteLine(Format(num4.ToString(), len));

	}
}

/* 結果
123  .67
12345.67
1    .20
1    .00
 */


これは、ちょっと面倒かな?
fuzuki
常連さん
会議室デビュー日: 2003/08/23
投稿数: 48
投稿日時: 2004-08-13 18:43
えムナウさん、meiさん、早速のご回答ありがとうございました。

結局、整数と少数を分けるやり方でやることにしました。書式指定でできると思っていたのですが、どうやら無理そうでしたので。
シンプルに書くはずが、桁のチェックや、小数部のチェックなどを含めざるを得なくなり、かなり長ったらしいコードになってしまいました(泣)

とりあえず、この件はこれで満足したいと思います。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)