Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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语言中实现数字格式#_C#_Number Formatting - Fatal编程技术网

C# 如何在C语言中实现数字格式#

C# 如何在C语言中实现数字格式#,c#,number-formatting,C#,Number Formatting,给定的数字是282100。我想显示上面的数字,如282.100,00 我正在使用 String.Format("{0:n}", number) 但我得到的结果是这样的282100.00。 预期=282.100,00。 在C#中有什么方法可以做到这一点吗?您可以创建自己的数字格式,并使用它来获得所需的结果。大概是这样的: NumberFormatInfo customFormat = new NumberFormatInfo(); ; customFormat.NumberGroupSepara

给定的数字是
282100
。我想显示上面的数字,如
282.100,00
我正在使用

String.Format("{0:n}", number)
但我得到的结果是这样的
282100.00
。 预期=
282.100,00

在C#中有什么方法可以做到这一点吗?

您可以创建自己的数字格式,并使用它来获得所需的结果。大概是这样的:

NumberFormatInfo customFormat = new NumberFormatInfo(); ;
customFormat.NumberGroupSeparator = ".";
customFormat.NumberDecimalSeparator = ",";
customFormat.NumberGroupSizes = new int[1]{3};

decimal someNumber = 123456789.123m;
string number = someNumber.ToString("N",customFormat);

如果您当前的区域性无法按照您想要的方式设置数字格式,您可以选择(至少):

  • 使用已知的
    CultureInfo
    ,该数字的格式与您所需的格式相同
  • 创建使用所需格式的自定义
    NumberFormatInfo
总的来说,我认为第一种选择更好。毕竟,如果您需要以特定的方式格式化数字,很可能是因为您是为了特定的文化而这样做的。因此,在这种情况下,最好的方法是只获取正确的
CultureInfo
对象(即使用
CultureInfo.GetCultureInfo()
),并将其用作格式化的
IFormatProvider

如果出于某种原因,不总是清楚要获取哪个特定的CultureInfo对象,那么可以使用第二种方法。例如:

decimal number = 282100;
NumberFormatInfo numberFormatInfo =
    (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
numberFormatInfo.NumberDecimalSeparator = ",";
numberFormatInfo.NumberGroupSeparator = ".";
string text = string.Format(numberFormatInfo, "{0:n}", number);
此特定示例允许您从已知的格式化程序开始,然后根据您的特定需要对其进行修改


最后,如果您认为您当前的文化应该按照您想要的方式格式化数字,但它没有这样做,那么最好弄清楚它为什么没有这样做,而不是覆盖当前的文化。通常,您希望对显示给用户或从用户处收到的任何文本使用默认格式,以便无论文化背景如何,程序都能正常工作。

您可以通过提供新的IFormatProvider来自定义格式:

var num = 282100;   

// Output using a custom formatter:
Console.WriteLine(num.ToString("N", 
    new NumberFormatInfo{ NumberDecimalSeparator = ",", NumberGroupSeparator = "."}));

// Or if you want to save the formatted string:
var str = String.Format(new NumberFormatInfo {NumberDecimalSeparator = ",", 
    NumberGroupSeparator = "."}, "{0:N}", num);

Console.WriteLine(str);

听起来像是文化问题。你检查过你的程序使用的是什么文化吗?另一种处理它的方法是执行类似于
String.Format(“{0:#####,####,##,#数字”)的操作虽然我确信有更好的方法可以做到这一点。使用使用使用所需分隔符的区域性,例如de de:
String.Format(CultureInfo.CreateSpecificCulture(“de”),“{0:n}”,282100)
当前区域性en GB,该格式是挪威语。然后就是
“nn NO”
“nb NO”