我觉得这很简单; .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.Format
或Convert.ToString
类似。有人还有其他想法吗?
答案 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