显示带有文化信息但没有格式化的数字

时间:2013-05-13 13:44:39

标签: c# cultureinfo string.format

我觉得这很简单; .Net Framework有很多函数可以完全按照你的意愿格式化数字,但是,我仍然无法完成这项工作。

问题:根据欧洲规则显示一个数字,所以用“。”对于千位分隔符和“,”表示小数分隔符,但也没有固定小数位数。

因此,例如,如果我有1234,那应该打印为"1.234",而1234.5应打印为"1.234,5"。但是我尝试的格式都没有做到这一点!

示例:假设ci是具有正确设置的CultureInfo,那么

num.ToString(ci)      -> "1234,5"   小数确定,但没有千位分隔符
num.ToString("G", ci) -> "1234,5"   与上述相同 num.ToString("N", ci) -> "1.234,50" 千位分隔符OK,但是小数点太多

等等。与使用NumberFormatInfo代替CultureInfo或尝试String.FormatConvert.ToString类似。有人还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

您可以像这样硬编码格式字符串

num.ToString("###,###,###.####");

这将输出关于tu当前线程文化信息。如果你有欧洲文化,你会得到“。”作为千分隔符。这将输出最多4个不等于0的小数。如果您有更大的数字或需要更大的精度,您可以增加小数位数和组数。 但是,不确定是否有更优雅的方式...

答案 1 :(得分:0)

也许你正在寻找:

number.ToString("#,##0.##", customCulture);

使用示例:

double first = 12345.67;
double second = 1234567;
var customCulture = (System.Globalization.CultureInfo)
    System.Globalization.CultureInfo.CurrentCulture.Clone();
customCulture.NumberFormat.NumberDecimalSeparator = ",";
customCulture.NumberFormat.NumberGroupSeparator = ".";
Console.WriteLine("First :    " + first.ToString("#,##0.##", customCulture));
Console.WriteLine("Second: "   + second.ToString("#,##0.##", customCulture));

没有定义确切的文化信息,您无法保证在任何文化中都能获得相同的结果。

这是我在控制台中得到的结果:

First :    12.345,67
Second: 1.234.567