我已经看到问题Odd decimal type behavior for ToString(IFormatProvider)
这是我的测试代码
// Define an array of numbers to display.
double[] numbers = { -1.5345e16, -123.4321, 19092.123, 1.1734231911290e16 };
// Define the culture names used to display them.
string[] cultureNames = { "en-US", "fr-FR", "ja-JP", "ru-RU" };
foreach (double number in numbers)
{
Console.WriteLine("{0}:", Convert.ToString(number,
System.Globalization.CultureInfo.InvariantCulture));
foreach (string cultureName in cultureNames)
{
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(cultureName);
culture.NumberFormat.NumberGroupSizes = new int[] {2,2,3};
culture.NumberFormat.NumberDecimalDigits = 5;
Console.WriteLine(".ToString {0}: {1,20}",
culture.Name, number.ToString("N", culture));
Console.WriteLine("Convert.ToString {0}: {1,20}",
culture.Name, Convert.ToString(number, culture));
}
Console.WriteLine();
}
,样本结果如下:
为什么Convert.ToString不应用格式?
这是使用Win7 Prof / VS2010 + SP1Rel(10.0.40219.1)
答案 0 :(得分:4)
根据Convert.ToString(double, IFormatProvider)
的文档:
此实现与Double.ToString(IFormatProvider)
相同
...然后documented为:
ToString(IFormatProvider)方法以指定文化的默认(“G”或一般)格式格式化Double值。
当您致电ToString
时,您正在传递N
- 如果您传入G
,则会获得与Convert.ToString
相同的结果。
G
format specifier documentation州:
结果字符串受当前NumberFormatInfo对象的格式设置信息的影响。下表列出了控制结果字符串格式的NumberFormatInfo属性。
...并列出NegativeSign
,NumberDecimalSeparator
,PositiveSign
。您的代码没有设置任何这些属性,这就是为什么它没有什么区别。如果你写:
culture.NumberFormat.NumberDecimalSeparator = "#"
例如,然后将影响Convert.ToString
的输出。