繁体   English   中英

C#ToString(“ 00”)的歧义

[英]C# ToString(“00”) ambiguity

在此页面上说:

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

“ 00”是特殊情况还是示例? 为什么要特别挑出来?

除“ 00”以外的格式的舍入模式是什么? 它专门提到整数舍入; 四舍五入到小数点后n位呢?

ToString(“ 0”)有什么作用? 是否与“ 00”相同但不舍入?

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

“ 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"));

对我来说,这似乎是一个文档错误,他们的示例将其显示为填充整数输出。

int.ToString("format") 

相当于

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM