ここで最も適切なのは、値の通貨がわかりやすいように10進数をその形式で束ねることです。私はこのようなことを助けるためにIsoDecimal
ヘルパーstruct
を作成しました。
void Main()
{
var arr = new string[]
{
"45,000.00 USD" ,
"45.00 USD" ,
"USD 45.00" ,
"USD45.00" ,
"45.00USD" ,
"45.00 RUP" ,
"IND 45.00" ,
"45.00 EUR" ,
"INR 45.00"
};
foreach (var num in arr)
{
Console.WriteLine(new IsoDecimal(num).ToString());
}
}
struct
はこちらです。
public struct IsoDecimal
{
private NumberFormatInfo numberFormat { get; set; }
private decimal value { get; set; }
public IsoDecimal(string strValue)
{
string strNumber = Regex.Match(strValue, @"[\d.\-,]+").Value;
string code = Regex.Match(strValue, @"[A-Z]+").Value;
numberFormat = new NumberFormatInfo();
numberFormat.NegativeSign = "-";
numberFormat.CurrencyDecimalSeparator = ".";
numberFormat.CurrencyGroupSeparator = ",";
numberFormat.CurrencySymbol = code;
value = Decimal.Parse(strNumber);
}
public static implicit operator decimal(IsoDecimal isoDecimal)
{
return isoDecimal.value;
}
public override string ToString()
{
return ToString("C");
}
public string ToString(string format)
{
return value.ToString(format, numberFormat);
}
}
struct
は、あなたがそれを必要とする場合には意志でdecimal
変数に値を割り当てることができ、そして統合して動作するようにシームレスであることにObject.ToString
を上書きします。
これは1つのコードとすべてのコードに対応していますか? – Nkosi