2012-11-02 26 views
4

我想將我的十進制值像2.2222一樣舍入到2.23。當我使用圓形,C#十進制取頂數2

decimal a = Math.Round((decimal)2.222, 2); 

當我使用上限,這導致3

decimal c = Math.Ceiling((decimal)2.22); 

我怎樣才能獲得2.2222到2.23?

+5

2.2222如何被舍入爲2.23?它應該舍入到'2.22' – Habib

+1

是的。我想要2.2222結果到2.23,我該怎麼辦? – Thura

+0

@Thura:你必須發明一個新的數學...... –

回答

-5

我解決我的問題失敗..

string n = "2.2222"; 
     string[] s = n.Split('.'); 

     if (s[1].Count() >= 3) 
     { 
      List<char> z = s[1].ToString().Take(2).ToList(); 
      int c=Convert.ToInt32(z[0].ToString() + z[1].ToString()) + 1; 
      // int b = Convert.ToInt32(s[1].ElementAt(0).ToString() + s[1].ElementAt(1).ToString()) + 1; 
      string output= s[0] + "." + c.ToString();    
     } 

現在任何數量可以說,它會取2個十進制值並加1.感謝。

+0

這是一個黑客,不應該使用。它不適用於像「2」這樣的「數字」。瑞瑞澤的答案不適合你嗎? – phant0m

+0

可以過濾一些條件。實際上,即使用戶只輸入'2',輸入值也會到達數據庫。 – Thura

1
decimal c = Math.Ceiling((decimal)2.2222*100)/100; 

但它很愚蠢。

+0

這是靜態的做法。因爲我的問題不完整。之後 。可以導致任何數字 – Thura

6
public static decimal CeilingAfterPoint(this decimal number, int digitsAfterPoint) { 
    return Math.Ceiling(number * (decimal)Math.Pow(10, digitsAfterPoint)) 
     /(decimal)Math.Pow(10, digitsAfterPoint); 
} 
+0

在紙上測試,應該爲你想要的工作正常:'小數c = CeilingAfterPoint(2.22222,2);' –

+0

嗯,我認爲你需要使它對於擴展方法是靜態的,而且'Math.Pow'返回雙重 – V4Vendetta

+0

是的,你現在正在修理。 –

0

嘗試像

decimal c = Math.Ceiling((decimal)2.222*100)/100; 

,但如果你的價值是2.22