String.Format问题

时间:2009-08-21 14:55:32

标签: c# .net vb.net string

MSDN提供了一个数字占位符示例:
1234.5678 ("#####") -> 1235 我发现这个令人困惑(我预计1234或其他什么),所以我用C#编写了这个片段来测试它:

Console.WriteLine(String.Format("{0:#}", 1234.5678));
Console.WriteLine(String.Format("{0:#####}", 1234.5678));
Console.WriteLine(String.Format("{0:#}", "1234.5678"));
Console.WriteLine(String.Format("{0:#####}", "1234.5678"));

它给出了这个输出:

1235
1235
1234.5678
1234.5678

请解释。

6 个答案:

答案 0 :(得分:13)

前两个String.Format调用正在格式化数字(十进制)值。格式字符串设置为仅显示整数部分(小数点之前),因此该值是四舍五入的。

后两个String.Format调用正在格式化字符串值,该值恰好包含数字的字符串表示形式。因此,您将准确回复所提供的内容。数字占位符仅适用于传递给String.Format的数值。

答案 1 :(得分:2)

尝试:

Console.WriteLine(String.Format("{0:#####.##}", 1234.5678));

哪个会给1234.57

您需要指定小数位。此外,最后两个是字符串,因此数字格式不适用。

答案 2 :(得分:0)

数字得到舍入,因为模式中没有定义小数位。字符串不会四舍五入,因为它们是字符串。

答案 3 :(得分:0)

您指定的前两种格式没有小数位,因此它会相应地舍入数字。最后两行不是格式化数字,而是格式化字符串,因此数字格式不适用。

答案 4 :(得分:0)

如您链接的MSDN文章中所述,格式说明符('#')仅适用于数字类型。

  

.NET Framework类库中的所有数字类型都支持自定义数字格式说明符。这些包括BigInteger,Byte,Decimal,Double,Int16,Int32,Int64,SByte,Single,UInt16,UInt32和UInt64类型。

您在第三行和第四行传递字符串而没有数字类型,因此不会应用formattin。

答案 5 :(得分:0)

前两个是数字,因此应用了格式,它们会向上舍入并丢弃小数。后两个是字符串,因此不会对它们应用数字格式。

相关问题