C# では、コンピューターの設定に従って金額をフォーマットしようとしています。
たとえば、en-US のセットアップが xxxx.xx (ドットで区切られている) で、nb-NO が xxxx.xx (カンマで区切られている) の場合、それを自動検出し、それに応じて金額をフォーマットします。
事前にご協力いただきありがとうございます。
C# では、コンピューターの設定に従って金額をフォーマットしようとしています。
たとえば、en-US のセットアップが xxxx.xx (ドットで区切られている) で、nb-NO が xxxx.xx (カンマで区切られている) の場合、それを自動検出し、それに応じて金額をフォーマットします。
事前にご協力いただきありがとうございます。
2つのインターフェイスIFormatProvider、ICustomFormatterを使用して、フォーマットを作成できます。public class TestConvertor:IFormatProvider、ICustomFormatter {public object GetFormat(Type formatType){if(formatType == typeof(ICustomFormatter))return this; nullを返します。}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
decimal amount = arg is decimal ? (decimal) arg : 0;
return amount.ToString("C", CultureInfo.CurrentCulture);
}
}
class Program
{
static void Main(string[] args)
{
double amount = 2541.25;
var f = string.Format(new TestConvertor(), "{0:Currency}", 2545);
Console.WriteLine(f);
Console.ReadKey();
}
}
これを試して
double amount = xxxx.xx;
string formattedCurrency=amount.ToString("C", CultureInfo.CurrentCulture);
通貨として (文字列として) フォーマットされた値を取得するだけの場合は、次のようにすることができます。
MyDecimal.ToString("c");
特定のプロパティを探している場合は、タイプが である特定のカルチャのNumberFormat
プロパティNumberFormatInfo
を調べることができます。
このクラスには、カルチャの千単位の区切り記号、小数点記号、通貨記号、負の数の処理方法などを示すプロパティが含まれています。
通貨の便利なプロパティ: