2011-11-23 94 views
23

我有double的值,如12.256852651,我想將其顯示爲12.257作爲浮點數,而不將其轉換爲字符串類型。浮點值的舍入

如何在C#中執行此操作?

+2

Math.Round(value,3)http://msdn.microsoft.com/en-us/library/75ks3aby.aspx – FailedDev

+3

你是什麼意思,而不是一個字符串格式?您將數字格式化爲字符串以顯示它,是不是? –

+0

也許它是通過一個數字(json,說)。除了轉換爲字符串以在UI中顯示之外,它可能需要存儲爲數字客戶端。只是基於類似的使用情況在這裏猜測。 –

回答

41

我想先轉換爲Decimal,然後在結果上使用Math.Round。這種轉換不是絕對必要的,但是如果我在使用二進制浮點的同時舍入到小數位,我總是感到有點不安。

Math.Round((Decimal)f, 3, MidpointRounding.AwayFromZero) 

你也應該看看的MidpointRounding的選擇,因爲它默認使用銀行家的圓,這是不是你從學校來的。

+0

請記住,在將二進制(與System.Decimal相反)浮點類型四捨五入爲大於「0」的小數位數時,通常「中點」不能完全表示。例如,「中點」12.2565(鄰居的平均值「12.256」和「12.257」)由於其二進制擴展是無限的(週期性的)(常常是這種情況),因此不能完全表示爲「雙」。因此,如果想要實際擊中「中點」,在舍入前嘗試轉換爲「小數點」是一個很好的理由。 「雙」在中點應該有一個「洞」。 –

8

如果你想顯示它,它將是一個字符串,這就是你需要使用的。

如果您想要回合爲了稍後在計算中使用它,請使用Math.Round((decimal)myDouble, 3)

如果您不打算在計算中使用它,但需要顯示它,請使用double.ToString("F3")