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)/ 

原文地址:https://www.cnblogs.com/zhangyongheng/p/4171130.html