在 c# 中,是不是有任何理由在十进制格式的左侧有相邻的 #?
Posted
技术标签:
【中文标题】在 c# 中,是不是有任何理由在十进制格式的左侧有相邻的 #?【英文标题】:In c#, is there any reason for having adjacent #'s on the left side of a decimal format?在 c# 中,是否有任何理由在十进制格式的左侧有相邻的 #? 【发布时间】:2018-05-29 22:03:58 【问题描述】:我正在查看团队代码库中的一些旧代码,这些代码正在执行一些像这样的十进制格式:
exampleDecimal.ToString("###.##")
对于这个例子,我认为前 2 个#
没有用。由于.
之前的所有#
都是可选数字,所以这不是总是给出相同的结果吗:
exampleDecimal.ToString("#.##")
但是,我通读了this c# documentation,并无法最终确定上述两种格式在技术上是否相同。他们会始终产生相同的输出,还是我缺少某些情况?
【问题讨论】:
应该很容易测试:for (decimal i = 0; i < 100000; i+=(decimal)0.01) Debug.Assert(i.ToString("###.##") == i.ToString("#.##"));
@MikeMcCaughan 谢谢。我只是认为某处可能有一些关于该行为的文档。
【参考方案1】:
来自您引用的文档链接:
“#”自定义说明符 “#”自定义格式说明符用作数字占位符符号。 [...]
请注意,此说明符从不显示不是有效数字的零,即使零是字符串中的唯一数字。只有当它是正在显示的数字中的有效数字时,它才会显示零。
所以,是的,两个格式字符串总是会产生相同的结果。
【讨论】:
我想我没有完全正确地解释它。好的,所以小数点前零左边的任何东西也是多余的。即"##00.##" == "00.##"
【参考方案2】:
是的,#
和 ##
产生相同的输出。
但是,当您使用多个 #
符号时,您可以嵌入其他字符。例如,#,###
格式会生成一个包含千位逗号的数字,如果它有足够的位数。
【讨论】:
以上是关于在 c# 中,是不是有任何理由在十进制格式的左侧有相邻的 #?的主要内容,如果未能解决你的问题,请参考以下文章
在发出拉取请求之前,是不是有任何理由将功能分支合并到分叉主控中?
是否有任何重要的理由在开关案例中使用枚举的序数,而不是使用枚举?
是否有任何理由更喜欢在 IDE 中运行应用程序而不是运行独立的可执行文件?
是否有任何理由在 grails 中使用通过 TagLibs 公开给定库的 JavaScript 库插件,而不是直接使用它?