gpt4 book ai didi

c# - 格式字符串中的多个前导 '#' 符号有什么作用吗?

转载 作者:行者123 更新时间:2023-11-30 21:45:45 26 4
gpt4 key购买 nike

在一些遗留的 .NET 代码中,我遇到过许多像这样的自定义数字格式字符串:

###,##0.00

这和有什么区别:

#,#0.00

?

编辑:

以下是我尝试过的一些示例输入,所有这些都对两个掩码产生相同的结果:1000000、1000、100、10、1.456、-30000、0.002。

编辑:

@Sahuagin 建议这些掩码可能是相同的,因为文化是如何设置为三位数分组的。然而,即使使用这个我也无法证明有什么不同:

var culture = new CultureInfo("en-US");
culture.NumberFormat.NumberGroupSizes = new[] { 1, 2, 3, 4 };
culture.NumberFormat.NumberGroupSizes.Dump();

1234567890.ToString("#,#0.00", culture).Dump(); // 1234,567,89,0.00
1234567890.ToString("###,#0.00", culture).Dump(); // 1234,567,89,0.00

更一般地说,我知道 # 是一个“可选”数字,不会创建前导或尾随零。但是,似乎小数点前只有一个 # 就足以获取所有前导数字。 MSDN docs 似乎区分了# 和##,但解释对我来说没有多大意义,而且我还没有找到它有所不同的例子。

最佳答案

# 表示数字将出现的位置(如果数字中存在数字)。如果没有任何此类符号,前导数字会自动出现(尽管您必须至少有一个 # 或一个 0,否则不会出现任何数字),但它们仍然有用,因为某些格式的占位符,例如电话号码:

var value = 1234567890;
Console.WriteLine("{0:###-###-####}", value);
// outputs 123-456-7890

在您的 #,#0.00 示例中,我认为只能设法正确格式化(三组),因为 , 是一个特殊的分组符号,并且区域性信息设置为将数字分成三组。没有它,你会得到类似 123-45.67 的东西,例如,如果你使用 - 而不是 ,

这是来自 MSDN 的关于 , 的更多具体信息:

The "," character serves as both a group separator and a number scaling specifier.

Group separator: If one or more commas are specified between two digit placeholders (0 or #) that format the integral digits of a number, a group separator character is inserted between each number group in the integral part of the output.

The NumberGroupSeparator and NumberGroupSizes properties of the current NumberFormatInfo object determine the character used as the number group separator and the size of each number group. For example, if the string "#,#" and the invariant culture are used to format the number 1000, the output is "1,000".

Number scaling specifier: If one or more commas are specified immediately to the left of the explicit or implicit decimal point, the number to be formatted is divided by 1000 for each comma. For example, if the string "0,," is used to format the number 100 million, the output is "100".

因此,在您的第一个 ###,##0.00 示例中,如果需要,它可能会减少到 #,0.00,尽管 #, ##0.00 是我通常使用的,因为它更清晰。

关于c# - 格式字符串中的多个前导 '#' 符号有什么作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com