2013-03-28 99 views
1

我使用C#編寫了計費系統的應用程序。在C中不同情況舍入或捨棄小數點#

總賬單可以向上或向下四捨五入以方便客戶支付給收銀員。它取決於以美分結尾的最後一個值。我使用數據類型十進制來進行計算。

當與美分0.00,0.01結束,0.02它將輪向下0.00

實例:

  • 10.00,10.01,或10.02輪下降到10.00
  • 10.10,10.11或10.12舍入爲10.10

當與美分0.03,0.04結束,0.05它將輪向上0.05

實例:

  • 10.03,10.04,或10.05圓形高達10.05
  • 10.13, 10.14或10.15取整到10.15

當以美分結束時0.05,0 0.06或0.07它將輪向下0.05

實例:

  • 10.05,10.06,10.07或向下舍入到10.05
  • 10.15,10.16,10.17或向下舍入到10.15

當美分0.08或0.09結束**它會**一輪上漲0.10

例子:

  • 10.08或10.09本輪下跌到10.10
  • 10.18或10.19本輪下跌10.20

現在的問題是我不能使用Math.Round因爲答案是不同的,不符合系統要求。假設我的總帳單是10.14,它會將舍入到10.10,但回答應該是舍入到10.15。

我希望有人幫我解決這個問題。

+2

請問乘以2,四捨五入,然後除以2解決您的問題? – 2013-03-28 07:32:27

+0

@ C.Evenhuis,謝謝。對不起,我不擅長數學 – Chuki2 2013-03-28 07:47:39

回答

3

我打算建議一個檢查最後一位數字的擴展方法。但你可以簡單地通過乘以和確保你使用正確的圓形類型來做到這一點。

你可以從這個答案得到它幾乎。

How do I round to the nearest 0.5?

+0

感謝您給予鏈接,簡單而完美! – Chuki2 2013-03-28 07:46:51

0
static public decimal RoundToNickel(decimal value) 
{ 
    var mod = value % 0.05M; 

    if (mod >= 0.03M) 
    { 
     return value + 0.05M - mod; 
    } 

    return value - mod; 
} 
2

簡單的答案是:

public decimal Round(decimal value) 
{ 
    return Math.Round(value * 20)/20; 
} 
+0

感謝尼古拉斯,我嘗試了你的代碼,並且是完美的。 – Chuki2 2013-03-28 08:05:34

+0

如果您使用此選項,請將其標記爲答案。 – 2013-03-28 08:20:08