我希望能够根据需要格式化任何十进制数。 具体来说,我希望能够控制:
我已经尝试这样做了
var nfi = new NumberFormatInfo();
nfi.NumberDecimalDigits= 4; <----- for point 1
nfi.NumberDecimalSeparator = "@"; <----- for point 2
nfi.NumberGroupSeparator = "^"; <----- for point 3? or
nfi.PerMilleSymbol= "#"; <----- for point 3?
然后我应用了它:
但由于某些原因我无法得到我所期望的。
如果我看here,它似乎适用于整数?
而且这个答案没有帮助
谢谢
帕特里克
格式化属性
NumberDecimalDigits
、NumberDecimalSeparator
、NumberGroupSeparator
和 PerMilleSymbol
不适用于所有格式字符串。要确定它们的适用性,您需要检查文档:
NumberDecimalDigits
:NumberDecimalDigits 属性与“F”和“N”标准格式字符串一起使用,在数字格式化操作中不带精度说明符。NumberDecimalSeparator
:NumberDecimalSeparator 属性与“E”、“F”、“G”、“N”和“R”标准格式字符串一起使用来定义分隔整数和小数数字的符号。 NumberGroupSeparator
:NumberGroupSeparator 属性与“N”标准格式字符串一起使用来定义分隔整数数字组的符号。PerMilleSymbol
:当使用包含“‰”的格式字符串对数值进行格式化时,分配给 PerMilleSymbol 属性的字符串将包含在结果字符串中。因为,正如 ToString(IFormatProvider)
ToString(IFormatProvider) 方法以指定区域性的默认(“G”或通用)格式格式化 Double 值。
仅
NumberDecimalSeparator
适用于此格式。您需要传递其他选项所实现的格式才能看到它们的效果。例如:
double aaa = -123456.789;
foreach (var formatString in new [] { "G", "N", "F", "P", "#0.## " + '\u2030'})
{
string str = aaa.ToString(formatString, nfi);
Console.WriteLine("aaa.ToString(\"{0}\", nfi) = {1}", formatString, str);
}
结果:
aaa.ToString("G", nfi) = -123456@789
aaa.ToString("N", nfi) = -123^456@7890
aaa.ToString("F", nfi) = -123456@7890
aaa.ToString("P", nfi) = -12,345,678.90 %
aaa.ToString("#0.## ‰", nfi) = -123456789 #
此处演示小提琴:https://dotnetfiddle.net/81HXz9