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