请查看这两个简单的代码和输出的差异。
using System;
namespace _02.CircleArea
{
class CircleArea
{
static void Main(string[] args)
{
double inputR = double.Parse(Console.ReadLine());
double circleArea = Math.Round((Math.PI * inputR * inputR), 12);
Console.WriteLine("{0}", circleArea);
}
}
}
输入 123.456 时,输出 47882.2198038791
这样做:
using System;
namespace _02.CircleArea
{
class CircleArea
{
static void Main(string[] args)
{
double inputR = double.Parse(Console.ReadLine());
double circleArea = (Math.PI * inputR * inputR);
Console.WriteLine("{0:F12}", circleArea);
}
}
}
使用相同的输入 123.456 ,它会提供不同的输出 47882.219803879100
为什么占位符舍入和Math.Round舍入结果之间存在差异?
答案 0 :(得分:2)
两者完全相同。不同之处在于尾随零的显示。由于在第一个代码片段中,有效数字的数量仅用于舍入而不能用于字符串格式化例程,因此您没有得到尾随零也就不足为奇了。
答案 1 :(得分:2)
Math.Round
实际上为您提供了一个新的数值,而使用格式代码只需显示一个舍入值。由于您在第二个格式字符串中指定了12位精度而不是第一个格式字符串,因此它会为您提供尾随零。
我会注意到数字格式总是将舍入为零,而Math.Round
默认为最接近偶数。