首页 > 代码库 > ToString("C2")转人民币金额时的相关问题

ToString("C2")转人民币金额时的相关问题

我们常常会遇到将数字转换为金额字符串,方法很简单,比如:

 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     }
View Code

其中“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);
View Code

所以,我们如果只给一个参数,第二个参数取本地默认的值,这个值和操作系统中某些参数设置有关系。如果我们可以给定第二个参数,就可以保证在任何操作系统中都转为人民币,改进后的代码是

 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     }
View Code

这里给出几个常用的货币标志码:

人民币:zh-CN

美元:en-US

法郎:fr-FR

日元:ja-JP

注:日元为羊字符 一横,人民币为两横:¥

 

参考文档:http://msdn.microsoft.com/zh-cn/dynamics/dwhawy9k(v=vs.85)/ 

ToString("C2")转人民币金额时的相关问题