2015-11-18 36 views
4

你是如何湊到最近的分數呢? 所以,以下小數, 我要舍和顯示金額:十進制小數到最接近的分數

1230.3092 => $1230.30 
221.9672 => $221.96 
12345.6808 => 12345.68 

我已經試過這

Math.Round(value, 2, MidpointRounding.ToEven) 
decimal.Round(value, 2, MidpointRounding.ToEven) 

,但由於某種原因,它向上舍。

+0

這不是多麼圓潤的作品。如果你想定義自己的數學習慣規則,那麼你必須自己實現這些規則。內置組件使用數學的標準規則。 – David

+0

添加更多示例,例如'1.005','10000000000.05'。這並不明顯。 – leppie

回答

4

你想這樣的:

(0.02m/1.00m) * decimal.Round(value * (1.00m/0.02m)) 

value * (1.00m/0.02m)處於「2分錢」單位計的金額。將該空間舍入爲一個整數,然後轉換回美元。

MidpointRounding應當用於確定要如何,例如,100.01m圓形,因爲它是中途之間100.00m100.02m

+0

所以這是默認的,爲什麼指定它? – leppie

+0

這仍然會達到1230.31,它應該是:1230.30 – ShaneKm

+1

@TimothyShields:問題實際上比您想象的更復雜;) – leppie

1

您試圖遵循非標準舍入規則,因此內置函數不會執行您正在查找的內容。無論是重載方法或創建自己的方法 - 它看起來像只需要截斷爲兩位小數,然後添加一個,如果結果是奇數(或樓層然後添加一個)。

+0

中途意味着中途:1230.3050中途1230.3092不是中途。 – SteveO

相關問題