请查看这两个简单代码以及输出中的差异。

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舍入结果之间有区别?

最佳答案

Math.Round实际上为您提供了一个新的数值,而使用格式代码只会显示一个四舍五入的值。由于您在第二个格式字符串中指定了12位精度,但未在第一个格式字符串中指定精度,因此它给您尾随零。

我会注意到数字格式总是四舍五入,而Math.Round默认情况下四舍五入为最接近的偶数。

关于c# - 为什么在C#中Math.Round舍入和占位符舍入之间有何区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39734829/

10-15 19:52