2016-02-24 27 views
0

任何人都可以請幫助我明白,爲什麼浮動的輸出是四捨五入小數?鑄造從「雙浮動」舍入小數位

碼 -

static void Main(string[] args) 
{ 
    float f = (float)Math.Round(Convert.ToDouble("270825.27000000000000"), 2); 
    double d = Math.Round(Convert.ToDouble("270825.27000000000000"), 2); 

    Console.WriteLine("Float - " + f.ToString()); 
    Console.WriteLine("Double - " + d.ToString()); 

    Console.Read(); 
} 

輸出 -

enter image description here

在此先感謝。

+2

因爲浮動不如雙精度? –

+1

從https://msdn.microsoft.com/zh-cn/library/system.single:「單個值最多有7位精度的十進制數字,但內部保留最多9位數字。」 –

+1

在賦值(轉換)其右側的同一個值之前('Math.Round(...)')。不要用「四捨五入」或類似的東西來掩蓋問題。您只需將'double'分配給'float'並因此導致*精度*。 – Sinatr

回答

1

你是鑄造雙浮動,所以basicly您有:

  1. 轉換爲而應該是浮動
  2. 四捨五入這是
  3. 鑄造

    float f = (float)Math.Round(float.Parse("270825.27000000000000"), 2); 
    double d = Math.Round(Convert.ToDouble("270825.27000000000000"), 2);  
    Console.WriteLine("Float - " + f.ToString());  
    Console.WriteLine("Double - " + d.ToString()); 
    

結果是:

浮點 - 270825.3

雙 - 270825.27

所以使用十進制

decimal f = (decimal)Math.Round(decimal.Parse("270825.27000000000000"), 2); 
Console.WriteLine("Decimal - " + f.ToString()); 

270825.27

+0

在代碼的所有位置使用小數 – profesor79