在 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 库插件,而不是直接使用它?

C# “数据“ToString的格式转换 进制转换 时间转换