#title(Visual Studio International Pack: East Asia Numeric Formatting Libraryを使う)

#contents

*Visual Studio International Pack: East Asia Numeric Formatting Libraryを使う [#w7cfa76f]

East Asia Numeric Formatting Library(東アジアのための数値フォーマットライブラリ)は、数値を漢数字の文字列に変換するためのクラスライブラリです。日本語、繁体字中国語、簡体字中国語および韓国語に対応しています。例えば、"12345"という数値を"壱萬弐阡参百四拾伍"や"一万二千三百四十五"や"一二三四五"という文字列に変換できます。日本語では、正の整数のみを変換できます。

**ダウンロードとインストール [#a6768171]

East Asia Numeric Formatting Libraryをインストールする手順は、第85号?で紹介した方法とほぼ同じです。インストールに使用するMSIファイルは、"EANumFormat.msi "です。

またプロジェクトの参照に「EastAsiaNumericFormatter.dll」を追加する必要があることも第85号?と同じです。具体的な方法は、「「○○○.dllを参照に追加します」の意味は?」をご覧ください。なおこのDLLがある場所は、デフォルトでは、「C:\Program Files\Microsoft Visual Studio International Pack\East Asia Numeric Formatting Library」というフォルダです。

**EastAsiaNumericFormatterクラス [#c47e6ad4]

East Asia Numeric Formatting Libraryで提供されているEastAsiaNumericFormatterクラスは、IFormatProviderとICustomFormatterインターフェイスを実装しているカスタム書式指定クラスです。よって、String.FormatメソッドのようなIFormatProviderを受け取ることが出来るメソッドで使用できます。

EastAsiaNumericFormatterクラスでサポートされている書式は以下の通りです。

|書式|名前|説明|"12345"を変換した例|h
|L|標準書式|大字とも呼ばれています。|壱萬弐阡参百四拾伍|
|Ln|既定書式|小字とも呼ばれています。|一万二千三百四十五|
|Lc|通貨書式|通貨値を表現します。日本語ではサポートされていません。|ArgumentExceptionがスローされます。|
|Lt|字訳書式|数値型データを数位文字が省略された漢数字で表示します。日本語でのみサポートされます。|一二三四五|

**使用例 [#xc66fd1a]

EastAsiaNumericFormatterクラスを使用して数値を日本語の文字列に変換する例を示します。

#code(vbnet){{
'文字列に変換する数字 
Dim num As Double = 12345678900.0R

Dim fmt As New Microsoft.International.Formatters.EastAsiaNumericFormatter()

'標準書式(大字) 
Console.WriteLine(String.Format(fmt, "{0:L}", num))
'壱百弐拾参億四阡伍百六拾七萬八阡九百 

'既定書式(小字) 
Console.WriteLine(String.Format(fmt, "{0:Ln}", num))
'百二十三億四千五百六十七万八千九百 

'通貨書式 
'Console.WriteLine(string.Format(fmt, "{0:Lc}", num)); 
'日本語ではサポートされていないため、ArgumentExceptionがスローされる 

'字訳書式 
Console.WriteLine(String.Format(fmt, "{0:Lt}", num))
'一二三四五六七八九〇〇 
}}

#code(csharp){{
//文字列に変換する数字
double num = 1.23456789E+10;

Microsoft.International.Formatters.EastAsiaNumericFormatter fmt =
    new Microsoft.International.Formatters.EastAsiaNumericFormatter();

//標準書式(大字)
Console.WriteLine(string.Format(fmt, "{0:L}", num));
//壱百弐拾参億四阡伍百六拾七萬八阡九百

//既定書式(小字)
Console.WriteLine(string.Format(fmt, "{0:Ln}", num));
//百二十三億四千五百六十七万八千九百

//通貨書式
//Console.WriteLine(string.Format(fmt, "{0:Lc}", num));
//日本語ではサポートされていないため、ArgumentExceptionがスローされる

//字訳書式
Console.WriteLine(string.Format(fmt, "{0:Lt}", num));
//一二三四五六七八九〇〇
}}

上記の例ではString.Formatメソッドを使って変換しましたが、EastAsiaNumericFormatterクラスのFormatメソッドで変換することも出来ます。また、カルチャを指定して変換したいときは、FormatWithCultureメソッドを使います。

#code(vbnet){{
'文字列に変換する数字 
Dim num As Double = 12345678900.0R

Dim fmt As New Microsoft.International.Formatters.EastAsiaNumericFormatter()

'日本語のカルチャ 
Dim ci As New System.Globalization.CultureInfo("ja-JP")

'変換して表示する 
Console.WriteLine(fmt.Format("L", num, Nothing))
Console.WriteLine( _
    Microsoft.International.Formatters.EastAsiaNumericFormatter.FormatWithCulture( _
      "L", num, Nothing, ci))
}}

#code(csharp){{
//文字列に変換する数字
double num = 1.23456789E+10;

Microsoft.International.Formatters.EastAsiaNumericFormatter fmt =
    new Microsoft.International.Formatters.EastAsiaNumericFormatter();

//日本語のカルチャ
System.Globalization.CultureInfo ci =
    new System.Globalization.CultureInfo("ja-JP");

//変換して表示する
Console.WriteLine(fmt.Format("L", num, null));
Console.WriteLine(
    Microsoft.International.Formatters.EastAsiaNumericFormatter.FormatWithCulture(
    "L", num, null, ci));
}}

**EastAsiaNumericFormatterクラスの制限 [#j5d10ea6]

EastAsiaNumericFormatterクラスには幾つかの制限があります。ここで紹介するものは日本語で確認したもので、別の言語では違う可能性もあります。

-double、float、int、uint、long、ulong、short、ushort、sbyte、byte、decimal型の変換に対応しています。
-小数点以下は切り捨てられます。
-0以上の数値である必要があります。
-変換できる最大値は、9.99999999999999E+15(九千九百九十九兆九千九百九十九億九千九百九十九万九千九百九十)であるようです。つまり、京以上の数は変換できません。
-範囲外の数値を変換しようとすると、ArgumentOutOfRangeExceptionがスローされます。

**最後に [#v7c74fdc]

Visual Studio International Packを4回にわたって説明してきましたが、日本語関係のライブラリは全て取り上げましたので、これで終わりとさせていただきます。「[[Visual Studio International Pack - MSDN フォーラム>http://forums.microsoft.com/MSDN-JA/ShowForum.aspx?ForumID=1989&SiteID=7]]」でVisual Studio International Pack に関する質問や要望などを受け付けているということですので、興味のある方は一度覗かれてみてはいかがでしょうか。

最後になりましたが、今年も一年お付き合いいただきまして、ありがとうございました。来年もよろしくお願いいたします。

**コメント [#a03d14c4]
#comment

//これより下は編集しないでください
#pageinfo([[:Category/.NET]] [[:Category/ASP.NET]],2008-12-30 (火) 01:34:10,DOBON!,2008-12-30 (火) 01:34:10,DOBON!)
[ トップ ]   [ 新規 | 子ページ作成 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]