.NET 自定义数字格式:多位数占位符 (##) 的意义何在?

.NET custom number formatting: what is the point of multiple digit placeholders (##)?

提问人:J.H. 提问时间:10/24/2023 最后编辑:TylerHJ.H. 更新时间:10/25/2023 访问量:60

问:

在 C# 文档和教程中,人们使用 、 等示例作为数字格式说明符。为什么要使用多个占位符?当在小数点分隔符之前使用时,它似乎与单个字符完全相同,并且没有前面的占位符。##,####,###,####0

J.F.

  • #### == #
  • ##,# == #,#
  • ###,# == #,#
  • ##,## == #,#

使用多个多余的文档示例#

  • 官方文档: -> .2147483647 ("##,#", en-US)2,147,483,647
    • #,#也一样,对吧?
  • 教程: // 输出 .Console.WriteLine(large.ToString("##.##"));"123456.79"
    • #.##也一样,对吧?
  • 教程: output: .format: ##### value: 123123
    • #也一样,对吧?

我错过了什么吗?

.NET 数字格式

评论

0赞 Panagiotis Kanavos 10/24/2023
是的。 仅在示例中使用,旨在表明它是可选的,如果没有数字,则不会填充。在 String.Format 文档中,#.# 或类似的字符串来显示如何指定十进制数字##2147483647 ("##,#", en-US) is only used to illustrate the behavior of the grouping operator. The other examples use
0赞 J.H. 10/24/2023
@PanagiotisKanavos 我不确定你的意思。我知道意味着一个可选的数字(组)。但是 和 or 和 似乎具有相同的输出。为什么要使用更冗长的,和/或为什么不在某个地方解释它们具有相同的输出。或者,如果它们对某些输入没有相同的输出,您能否举例说明此类输入?例如,参见 dotnetfiddle.net/PxhYsg###,##,######

答:

0赞 TylerH 10/24/2023 #1

# 自定义说明符文档指出,它表示要将输入值四舍五入到小数点前最接近的数字:

“##”格式字符串使值四舍五入到小数点前最接近的数字,其中始终使用从零开始四舍五入。例如,使用“##”格式化 34.5 将生成值 35。

然而,这似乎充其量是误导性的。 如上所述,将产生 。但是,同一值上的单个会导致 .##1234.561235#12345

真正起作用的是小数点后占位符的数量。例如,on 将导致 ,而 on 相同的值将导致 。##.#1234.561234.6#.##1234.56

我看不出逗号声明()之间有什么区别,除非C#可以在进行声明本身时检测到您当前的文化。对我来说,在美国的英语语言机器上,我的声明必须是英语文化(我不能用来指示我想使用十进制逗号,即使在指定使用十进制逗号的区域时也是如此;我需要指定区域/区域,C#将转换它)。####,##,##.#

评论

0赞 J.H. 10/25/2023
当然,四舍五入。但也是这样做的。dotnetfiddle.net/CzJ0s9 .我是否错过了它在双精度和单精度之间具有不同输出的情况?####
0赞 TylerH 10/25/2023
@J.H. 仔细想想,文档似乎不正确。该行为实际上并不特定于小数点前最接近的数字(实际上,在这些示例中,它对前面的数字根本没有区别,只对后续数字产生影响)。我还可以说,小数点后的占位符数量确实会改变它四舍五入的位置。例如,在 Fiddle 中使用 vs on 进行比较。#.##.##value2
0赞 TylerH 10/25/2023
@J.H.我重写了答案,以反映测试过程中发现的信息。
0赞 J.H. 10/25/2023
谢谢泰勒。(1) 我同意,这就是为什么我指定了我的问题:“在小数点分隔符之前使用时,它似乎与单个 # 字符的作用完全相同”。我知道小数点后分隔符的数量是有区别的。(2)你似乎暗示了这一点,并根据用户文化在格式字符串中更改了功能。我不认为是这样。 始终是格式字符串中的千位分隔符和小数点分隔符。只有在输出中,才会应用用户区域性,从而应用他们自己的分隔符。#,.,.
0赞 TylerH 10/25/2023
@J.H.我不确定(请参阅“除非 C# 可以检测到”)--我无法测试这两种情况,因为我不想将我的 Windows 操作系统和 Visual Studio 实例设置为不同的区域性来找出答案。在法国(他们用作小数点),使用法语版本的 Windows(例如),他们是否仍然需要书写以指示小数点?或者他们可以写吗?,#.##,#