3

我在这里遇到了一个小问题,假设您有以下代码:

int whole = 0;
double decimal = 88.00

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

所以这就是问题所在,将 double 显式转换为 int 很容易。但是如果我现在这样做,“整体”将被设置为 59。这 - 不太好,我希望它被设置为最后一个整数(即 58)。

你如何在 C# 中做到这一点?

4

6 回答 6

7

要将双精度数舍入为整数,您有 4 个基本数学函数:

  1. Math.Round()- 四舍五入到最接近的整数(或用户指定的小数位数),并让您选择向上或向下舍入中间点。

  2. Math.Floor()- 向负无穷方向舍入到第一个整数。

  3. Math.Ceiling()- 向正无穷方向舍入到第一个整数。

  4. Math.Truncate()- 向零舍入到第一个整数。

我想你想要Floor要么Truncate。两者都向下舍入为正数,但Truncate将 -3.6 舍入到 -3,同时将其舍Floor入到 -4。

转换为int与截断相同,因此您可以根据需要使用它。

于 2012-07-26T12:42:11.093 回答
4

数学楼层

whole = (int)Math.Floor(decimal / 1.5);
于 2012-07-26T12:29:35.830 回答
2

如果您double转换为int,答案将不是 59 - 而是 58。转换double为 时int,该值将四舍五入到零。所以,这就足够了:

int whole = 0;
double x = 88.00;
whole = (int)(x / 1.5); // whole will be 58
于 2012-07-26T12:38:48.350 回答
1

如果要舍入到最后一个整数,请使用Math.Floor ,如果要舍入到下一个整数,请使用Math.Ceiling

于 2012-07-26T12:29:08.690 回答
0

这会将双精度值转换为int

whole = (int)(decimal / 1.5);

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

于 2012-07-26T12:32:02.673 回答
0

如果你需要四舍五入,这很常见:whole = (int)(decimal / 1.5 + 0.5); 没有 0.5,您将截断,而不是四舍五入。

如果你的数学库中有舍入函数,那也很好。其中一些会为舍入 0.5 做奇数/偶数的事情,以避免一点点数据倾斜。

于 2012-07-26T17:05:54.093 回答