提问人:J.H. 提问时间:10/24/2023 最后编辑:TylerHJ.H. 更新时间:10/25/2023 访问量:60
.NET 自定义数字格式:多位数占位符 (##) 的意义何在?
.NET custom number formatting: what is the point of multiple digit placeholders (##)?
问:
在 C# 文档和教程中,人们使用 、 等示例作为数字格式说明符。为什么要使用多个占位符?当在小数点分隔符之前使用时,它似乎与单个字符完全相同,并且没有前面的占位符。##,#
###,#
##,##
#
#
0
J.F.
####
==#
##,#
==#,#
###,#
==#,#
##,##
==#,#
使用多个多余的文档示例#
- 官方文档: -> .
2147483647 ("##,#", en-US)
2,147,483,647
#,#
也一样,对吧?
- 教程: // 输出 .
Console.WriteLine(large.ToString("##.##"));
"123456.79"
#.##
也一样,对吧?
- 教程: output: .
format: ##### value: 123
123
#
也一样,对吧?
我错过了什么吗?
答:
0赞
TylerH
10/24/2023
#1
# 自定义说明符文档指出,它表示要将输入值四舍五入到小数点前最接近的数字:
“##”格式字符串使值四舍五入到小数点前最接近的数字,其中始终使用从零开始四舍五入。例如,使用“##”格式化 34.5 将生成值 35。
然而,这似乎充其量是误导性的。 如上所述,将产生 。但是,同一值上的单个也会导致 .##
1234.56
1235
#
12345
真正起作用的是小数点后占位符的数量。例如,on 将导致 ,而 on 相同的值将导致 。#
#.#
1234.56
1234.6
#.##
1234.56
我看不出逗号声明()之间有什么区别,除非C#可以在进行声明本身时检测到您当前的文化。对我来说,在美国的英语语言机器上,我的声明必须是英语文化(我不能用来指示我想使用十进制逗号,即使在指定使用十进制逗号的区域时也是如此;我需要指定区域/区域,C#将转换它)。#
##
#,#
#,#
#.#
评论
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(例如),他们是否仍然需要书写以指示小数点?或者他们可以写吗?,
#.#
#,#
评论
##
2147483647 ("##,#", en-US) is only used to illustrate the behavior of the grouping operator. The other examples use
#
##,#
#,#
####
#