将变量转换为int vs round()函数

我已经在几个地方看到过它,其中(int)someValue是不准确的,而是调用round()函数的问题。 两者有什么区别?

具体来说,如果需要,对于C99 C.我在java中编写时也看到了同样的问题。

在将float / double值转换为int情况下,由于整数截断 ,通常会松散小数部分。

这与我们通常预期的舍入完全不同,因此例如2.8最终为2,整数截断,就像2.1最终为2。

更新

导致潜在(粗略)不准确的另一个原因是由于有限的值范围能够用整数表示而不是浮点类型(感谢@R在下面的评论中提醒我们这一点)

  1. 转换为int截断一个浮点数,也就是说,它会丢弃小数部分。
  2. round函数返回最接近的整数。 中途情况从零开始舍入,例如, round(-1.5)-2round(1.5)2

7.12.9.6圆函数

概要

 #include  double round(double x); float roundf(float x); long double roundl(long double x); 

描述

round函数将它们的参数四舍五入为浮点格式的最接近的整数值,无论当前的舍入方向如何,都将中间情况舍入为零。

返回

round函数返回舍入的整数值。

资料来源:C99标准( ISO / IEC 9899:1999 )。 本节未在C11标准( ISO / IEC 9899:2011 )中进行更改。

(对于那些感兴趣的人, 这里有一个关于舍入算法的明确介绍。)

特别是对于C,在大多数情况下(可能)是正确的,但是,你应该总是测试结果。

转换的问题是,它可以截断OR轮。 它的作用很大程度上取决于编程语言,略微取决于所使用的特定编译器。 这意味着对于始终适用的结果没有一般规则。

Round()通常用于生成类似于数学舍入的结果。 有一个边缘情况需要针对.5进行专门监控,有时会轮到下一个偶数。