C# 显示带有区域性信息但不带格式的数字
我认为这很简单;Net Framework有很多函数可以完全按照您的需要格式化数字,但我仍然无法做到这一点 问题是:根据欧洲规则显示一个数字,所以用“.”表示千位分隔符,用“.”表示十进制分隔符,但不固定小数位数 例如,如果我有1234,它应该打印为C# 显示带有区域性信息但不带格式的数字,c#,cultureinfo,string.format,C#,Cultureinfo,String.format,我认为这很简单;Net Framework有很多函数可以完全按照您的需要格式化数字,但我仍然无法做到这一点 问题是:根据欧洲规则显示一个数字,所以用“.”表示千位分隔符,用“.”表示十进制分隔符,但不固定小数位数 例如,如果我有1234,它应该打印为“1.234”,1234.5应该打印为“1.234,5”。但我尝试过的格式都没有做到这一点 示例:假设ci是具有正确设置的CultureInfo,则 num.ToString(ci)->“1234,5”小数可以,但没有千位分隔符 num.ToStri
“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”
1000个分隔符可以,但小数太多
等等。类似于使用
NumberFormatInfo
而不是CultureInfo
,或尝试String.Format
或Convert.ToString
。有人有其他想法吗?您可以像这样硬编码格式字符串
num.ToString("###,###,###.####");
这将根据当前线程区域性信息输出。如果你有欧洲文化,你会得到“.”。这将输出多达4个不等于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
非常感谢。我用这个测试了一下,这绝对是我需要的。除了使用all#s时,数字0不显示任何内容,但您可以将小数点前的最后一个#替换为0,而不会丢失功能。就是这样。非常感谢。