2012-07-26 42 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的奇数/偶数来避免数据歪斜。