2012-07-26 64 views
3

我卡在這裏有點問題,說你有下面的代碼:鑄造INT將翻一番,四捨五入到最後整數

int whole = 0; 
double decimal = 88.00 

whole = decimal/1.5; //now the answer is 58.66 

所以這裏的問題,明確鑄造雙爲int很簡單。但是如果我現在這樣做,'整體'將被設置爲59.這個 - 不太好,我希望它被設置爲最後一個整數(是58)。

你如何在C#中做到這一點?

+2

使用回合。我認爲這會奏效。 – 2012-07-26 12:28:12

+2

使用'Math.Floor(十進制/ 1。5);' – Matzi 2012-07-26 12:28:47

+1

任何人也有一個WTF時刻「雙十進制類型?」 :) – 2012-07-26 12:31:39

回答

4

Math.Floor

whole = (int)Math.Floor(decimal/1.5); 
+0

非常感謝:) – Tiwaz89 2012-07-26 12:30:36

1

如果要舍入到最後一個整數,請使用Math.Floor,如果要舍入到下一個整數,則使用Math.Ceiling

0

這將轉換的雙重價值爲int

whole = (int)(decimal/1.5); 

此外,您還可以使用Math.Floor(doubleValue)

2

如果你投doubleint,答案不會是59 - 這將是58.當鑄造doubleint,該值將被舍向零。所以,這是足夠了:

int whole = 0; 
double x = 88.00; 
whole = (int)(x/1.5); // whole will be 58 
+1

他希望整體= 59:p – 2012-07-26 12:40:18

+0

@John OP指出「我希望它被設置爲最後一個整數(是58)」。 – 2012-07-26 12:45:11

+0

哦,我不明白... :)謝謝! – 2012-07-26 12:56:24

7

爲了圓雙打爲整數,您有4個基本的數學函數:

  1. Math.Round() - 舍入到最接近的整數(或deciml地方的用戶指定數目) ,並讓您選擇向上或向下舍入中間點。

  2. Math.Floor() - 將第一個整數向負無窮回合。

  3. Math.Ceiling() - 將第一個整數向正無窮大舍入。

  4. Math.Truncate() - 將第一個整數向下舍入爲零。

我想你想要麼FloorTruncate。兩輪均爲正數,但Truncate輪爲-3.6至-3,而Floor輪爲-4。

鑄造到int與截斷相同,所以你可以使用,如果你喜歡。

0

如果您需要四捨五入,這是很常見的使用方法: 整個=(INT)(十進制/ 1.5 + 0.5); 沒有0.5,你會截斷,而不是四捨五入。

如果你在你的數學庫舍入函數,這是很好的了。其中一些將湊齊0.5的奇數/偶數來避免數據歪斜。