2013-05-10 99 views
1

我的情況是,如果如果它有小數點位置,則將值增加1?

47/15= 3.13333 

我想把它轉換成4,如果結果有小數,我想通過1增加的結果,現在我這樣做像

 float res = ((float)(62-15)/15); 
     if (res.ToString().Contains(".")) 
     { 
      string digit=res.ToString().Substring(0, res.ToString().IndexOf('.')); 
      int incrementDigit=Convert.ToInt16(k) + 1; 


     } 

我想知道是否有任何快捷方式或在C#中的函數內置,以便我可以做到這一點,而不需要實現字符串函數。

非常感謝。

+4

Math.Ceiling ?: http://msdn.microsoft.com/en-us/library/vstudio/zx4t0t48.aspx – Fox32 2013-05-10 12:20:51

+0

http://stackoverflow.com/questions/904910/how-do-i-round- a-float-up-the-the-int-in-c – Steve 2013-05-10 12:21:13

+1

你的意思是像'System.Math.Ceiling'這樣的東西是四捨五入嗎? (子問題:如果你的數字是負數,「-3.13333」應該仍然「添加」一個,並使-4或_really_添加並使其爲-3?) – 2013-05-10 12:21:19

回答

7

你的意思是你想執行整數除法,但總是四捨五入嗎?我懷疑你想:

public static int DivideByFifteenRoundingUp(int value) { 
    return (value + 14)/15; 
} 

這避免了使用浮點運算的話 - 它只是允許這不是15的整數倍,以四捨五入的任何值,由於方式,整數運算向零截斷。 -

注意,這確實爲負輸入工作,例如,如果你在-15過去了,這將返回0,你可以如此修正:

public static int DivideByFifteenRoundingUp(int value) { 
    return value < 0 ? value/15 : (value + 14)/15; 
} 
+1

我可以投這個答案兩次嗎?非常好的四捨五入整數解決方案。 – 2013-05-10 12:37:05

5

使用Math.Ceiling報價MSDN

返回最小的積分值大於或等於 指定的十進制數。

+0

雖然沒有必要這麼做 - 總是有一些簡單的方法可以總結,而不需要浮點。 – 2013-05-10 12:22:05

+1

你是對的,但假設他有結果3.13333,他有浮點。你的代碼更快,但對於初學者來說很難理解。 – 2013-05-10 12:24:34

+1

但是如果你退後一步,他沒有那個結果 - 他只是想要整數除法,四捨五入。請注意,在您的版本中,您需要將其重新轉換爲'int' *並且*它會爲非常大的數字提供「有趣」的結果,其中'float'的粒度大於整數。 – 2013-05-10 12:36:14

0

做什麼你問的另一種方式將每個數字加上0.5,然後放置它(截斷小數位)。恐怕我現在無法訪問C#編譯器來確認確切的函數調用!

注意:但是正如其他人已經證實的那樣,我認爲Math.Ceiling函數能夠最好地向他人傳達您的意圖。

0

喜歡的東西:

float res = ((float)(62-15)/15); 

int incrementDigit = (int)Math.Ceiling(res); 

int incrementDigit = (int)(res + 0.5f); 
1

您正在尋找Math.Ceiling()

將您的值轉換爲十進制或雙精度,並且該方法的結果就是您所需要的。像:

double number = ((double)(62-15)/(double)15); 
double result = Math.Ceiling(number); 

請注意,我把15投給了雙倍的事實,所以我避免了整數除法。這很可能不是你想要的。