我在这里遇到一个小问题,说你有以下代码:
int whole = 0;
double decimal = 88.00
whole = decimal / 1.5; //now the answer is 58.66
所以这就是问题,明确地将一个double转换为int很容易。但是如果我这样做,那么现在'整体'将被设置为59.这个 - 不太好,我希望它被设置为最后一个整数(58)。
你如何在C#中做到这一点?
答案 0 :(得分:7)
要将双精度舍入为整数,您有4个基本数学函数:
Math.Round()
- 舍入到最接近的整数(或用户指定的分位数),并允许您选择向上或向下舍入中间点。
Math.Floor()
- 向负无穷大的第一个整数舍入。
Math.Ceiling()
- 向正无穷大舍入第一个整数。
Math.Truncate()
- 向第一个整数舍入为零。
我认为你想要Floor
或Truncate
。两者都向下舍入为正数,但Truncate
向下舍入-3.6到-3,而Floor
向右舍入为-4。
转换为int
与截断相同,因此如果您愿意,可以使用它。
答案 1 :(得分:4)
whole = (int)Math.Floor(decimal / 1.5);
答案 2 :(得分:2)
如果您将double
投射到int
,答案将不会是59 - 它将是58.将double
投射到int
时,该值将被舍入朝零。所以,这就足够了:
int whole = 0;
double x = 88.00;
whole = (int)(x / 1.5); // whole will be 58
答案 3 :(得分:1)
如果要舍入到最后一个整数,请使用Math.Floor;如果要舍入到下一个整数,请使用Math.Ceiling。
答案 4 :(得分:0)
这会将double值转换为int
:
whole = (int)(decimal / 1.5);
此外,您可以使用Math.Floor(doubleValue)
。
答案 5 :(得分:0)
如果你需要四舍五入,那么使用它是很常见的: whole =(int)(decimal / 1.5 + 0.5); 没有0.5,你就是截断,而不是四舍五入。
如果你的数学库中有一个舍入函数,那也很好。其中一些将为舍入0.5做奇/偶事,以避免一点数据偏斜。