請看這2個簡單的代碼和輸出的差異。爲什麼Math.Round舍入和C#中佔位符四捨五入之間的區別?
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舍入結果之間的區別?
@CodeCaster:在這個問題中討論的區別在這裏沒有被觀察到。 –
您從{0}獲得的默認格式可確保顯示的結果不超過15位有效數字。因爲顯示更多將是無意義的,* double *類型不能存儲那麼多數字。它的尾數使用53位,只允許表示2^53個不同的值。當你使用F12時,你會覆蓋廢話規則並獲得17位數字。最後兩個只是隨機噪聲,你不幸的是他們是0.這可能發生,這是一個意外。 –