Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示带有区域性信息但不带格式的数字_C#_Cultureinfo_String.format - Fatal编程技术网

C# 显示带有区域性信息但不带格式的数字

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

我认为这很简单;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”
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,而不会丢失功能。就是这样。非常感谢。