我们常常会遇到将数字转换为金额字符串,方法很简单,比如:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 double num = 123.456; 6 string num1 = num.ToString("C2"); 7 Console.WriteLine(num1); 8 Console.Read(); 9 } 10 }
其中“C”是表示转金额,”2“是表示保留小数点后两位的精度。
结果是
但是,实际中我们写的程序,客户用的时候遇到了问题,就是在他们那,用同样的代码,结果却是:
最后研究了一番,发现,ToString()方法有一个重载是 两个参数的,官方给的是:
1 // 2 // 摘要: 3 // 使用指定的格式和区域性特定格式信息,将此实例的数值转换为它的等效字符串表示形式。 4 // 5 // 参数: 6 // format: 7 // 一个数值格式字符串。 8 // 9 // provider: 10 // 一个提供区域性特定的格式设置信息的对象。 11 // 12 // 返回结果: 13 // 此实例的值的字符串表示形式,由 format 和 provider 指定。 14 [SecuritySafeCritical] 15 public string ToString(string format, IFormatProvider provider);
所以,我们如果只给一个参数,第二个参数取本地默认的值,这个值和操作系统中某些参数设置有关系。如果我们可以给定第二个参数,就可以保证在任何操作系统中都转为人民币,改进后的代码是
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 double num = 123.456; 6 string num1 = num.ToString("C2",CultureInfo.CreateSpecificCulture("zh-CN"))); 7 Console.WriteLine(num1); 8 Console.Read(); 9 } 10 }
这里给出几个常用的货币标志码:
人民币:zh-CN
美元:en-US
法郎:fr-FR
日元:ja-JP
注:日元为羊字符 一横,人民币为两横:¥
参考文档:http://msdn.microsoft.com/zh-cn/dynamics/dwhawy9k(v=vs.85)/