如何将小数0解析为字符串?

3
当我使用方法时,将十进制数(0)转换为字符串时,为什么我的字符串显示为空?
String somthing = someDecimal.ToString("#")

当我在使用:

String somthing = somDecimal.ToString("0.##")

这个字符串显示为 0

当我在调试模式下查看这个值时,两种方式都显示它们内部有一个 "0"。


在过去的两分钟内,您已经收到了大约一千个回复。请查看MSDN文档中System.ConvertDecimal.ToString()的示例。通过您的所有回复和文档,您应该完全明白了。请确保给任何有帮助的回复点赞! - FoggyDay
4个回答

4
"#"自定义格式指示符中可知,注意该指示符不会显示非重要数字的零,即使字符串中只有零这一个数字。它只会在被显示的数字中零是一个重要数字时才会显示零。
如果您想显示小数点后的数字,则需要使用0.00而不是0.##

谢谢你的回答,我一直在寻找这样的页面。但是让我困惑的是为什么调试器显示字符串“something”的值为“0”?此时十进制已经解析了吗?所以它应该仍然返回“”? - Cageman
@user3401136 非常欢迎。请多次阅读自定义数字格式字符串链接,以更深入地了解这些说明符。 - Soner Gönül
1
@user3401136 这里没有解析相关的内容。在你的情况下,something 只是你的 someDecimal 值的字符串表示(具有特定格式)。当你使用 0.ToString("0") 时,你可以在调试器中看到字符串 "0"。如果你使用 0.ToString("#"),你可以在调试器中看到字符串 ""(_空字符串_)。这在它们的文档中已经解释得很清楚了。 - Soner Gönül
好的,我认为我已经将小数点添加到我的手表中,而不是字符串,现在我看到它有了 "" 是的,这使得它更清晰。谢谢 :) - Cageman

2

如果您想要在小数点后显示固定的位数,您需要使用

 String somthing = somDecimal.ToString("0.00")

在你的例子中,你使用了#占位符,这意味着“如果有一个有意义的数字,请在此处放置一个数字”。 如果someDecimal0.01,它将起作用。
 decimal somDecimal = 0.01m
 String somthing = somDecimal.ToString("0.##");

但是有一个例外

 decimal somDecimal = 0.01m
 String somthing = somDecimal.ToString("0.#");

2
由于井号“#”意味着如果有一个数字,则将其转换为符号。而“0”是一个“空”的数字,因此它会转换为空字符串“”。实际上,在第二种情况下,您会得到数字“0”,因为您暗示要在小数点前至少显示一个数字。所有这些都是C#语言的设计约定。

2

MSDN: "#"自定义格式指示符

"#"自定义格式指示符作为数字占位符号。 如果被格式化的值在格式字符串中出现“#”符号的位置上有一个数字,则该数字将被复制到结果字符串中。否则,在结果字符串中该位置上不会存储任何内容。请注意,即使零是字符串中唯一的数字,此指示符也永远不会显示不是有效数字的零。它只会在被显示的数字中是有效数字时才显示零。

因此,如果小数点后的数字为1而不是0,则即使使用ToString("#"),它也会被显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接