C#ToString(“00”)含糊不清

时间:2013-07-30 02:45:48

标签: c# string-formatting tostring ambiguity

page上,它说:

  

“00”说明符使得值四舍五入到小数点前面的最近数字,其中始终使用从零开始的舍入。例如,使用“00”格式化34.5将导致值35。

“00”是一个特例还是一个例子?为什么特别挑出来?

除“00”以外的格式的舍入模式是什么?它特别提到了整数舍入;怎么样在小数点后n位舍入?

ToString(“0”)做什么?它与“00”相同但没有四舍五入吗?

我尝试了ToString(“00”),它给了我一个零填充数字,我只期待一个数字。

2 个答案:

答案 0 :(得分:5)

“00”不是一个特例,只是一个例子,虽然措辞的方式使它听起来像一个特例。

来自文档:

  

“0”自定义格式说明符用作零占位符符号。   如果正在格式化的值在其中的位置有一个数字   零出现在格式字符串中,该数字被复制到   结果字符串;否则,结果字符串中会出现零。该   小数点前面最左边零点的位置和   小数点后最右边的零确定数字范围   它始终存在于结果字符串中。

所以ToString(“00”)意味着你将在小数点左边有两位数的最小,小数点右边没有数字(那些得到舍入)。同样,ToString(“000”)将为您提供至少3位数字,依此类推。

您还可以控制显示在小数点右侧的精确位数。 ToString(“000.00”)将为您提供小数点左侧至少3位数,右侧正好为2位数。小数点右边的任何额外数字都将被舍入。

以下是一些传递断言来证明:

var value = 67.89;
Assert.AreEqual("68", value.ToString("0"));
Assert.AreEqual("68", value.ToString("00"));
Assert.AreEqual("068", value.ToString("000"));
Assert.AreEqual("067.9", value.ToString("000.0"));
Assert.AreEqual("067.89", value.ToString("000.00"));
Assert.AreEqual("067.890", value.ToString("000.000"));

答案 1 :(得分:1)

它看起来像是一个文档错误,他们的示例将其显示为填充整数输出。

int.ToString("format") 

等同于

string.Format("0:format", int)