2013-04-23 109 views
0

从float转换为int时,float结果如何四舍五入为整数?从float转换为int时,float结果如何四舍五入为整数?

有时我在整数变量之间做了一些复杂的算术运算(包括乘法,除法等),并将结果再次转换为int。

实施例:

result = (int) ((int1 + int2) * int3/int4); 

它发生,有时结果舍入到最接近的整数,其他时间,即使浮子结果是更靠近上面的一个,有时代替结果进行舍入的下整数向上或向下2个整数(即,如果结果是-150.69,则可能发生结果= -149)。

从float到int的转换有一定的规律,还是取决于大小写?

在此先感谢。


实施例:

int1 = 31; 
int2 = -1366; 
int3 = 50; 
int4 = 1000; 

结果应该是-66.75但返回的一个是-65。

+0

请举一个例子(输入设定'int1' ...'int4')表现出您所描述的行为。 – 2013-04-23 14:01:00

+1

所有的intn变量都是int吗?如果是这样,那么这里就没有浮点数了,我想你的问题真的是“整数除法是如何执行的”。 – interjay 2013-04-23 14:01:31

+0

@interjay是所有的变量都是整数。 – aliants 2013-04-23 14:05:07

回答

1

在你的代码中,除非int1int4实际上是浮点数,你没有任何浮点类型,所以你的问题与你的代码无关。

至于问题本身,浮点到整数的转换总是通过截断发生(丢弃小数部分)。对于四舍五入,标准库具有许多功能,如floor,ceil,round等,它们可以执行不同类型的舍入。

+0

因此,如果我的4个变量都是整数,那么每个操作都会被截断?这就是为什么它会发生-150.69被“四舍五入”到-149的原因吗? – aliants 2013-04-23 14:02:12

+0

@aliants:是的,每个整数操作数的操作都是用整数算术单独完成的。每个中间结果都被截断(或溢出)以匹配正在使用的类型。除此之外,C具有使用整数类型的特定规则。一般来说,如果你使用int对象,你将得到'int'算术,并且溢出'int'的结果会导致问题。如果使用一个'unsigned int'对象,则大多数二元运算符中的另一个'int'操作数将被转换为'unsigned int'。如果你在'int'中使用'long','int'将被转换为'long'等。 – 2013-04-23 14:08:30

+0

请注意,这仍然不能解释为什么-66.75被“舍入”为-65(而不是被截断到预期的-66)。在你的例子中(这里的评论)-150.69将被截断为-150,而不是“四舍五入”到-149。 – lnafziger 2013-04-23 14:23:30