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

cmp*_*cmp 25 c int rounding

我已经在几个(int)someValue不准确的地方看到它,而是问题需要这个round()功能.两者有什么区别?

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

Lev*_*von 22

如果将float/ double值转换为int,则通常会因整数截断而松散小数部分.

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

更新:

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

  • 强制转换或隐式转换为整数的另一个问题是大数值会被破坏。即使您想要整数结果,通常最好保留浮点类型,以便保留大数值。`round`、`floor`、`rint` 等函数可以做到这一点。 (2认同)

kol*_*kol 10

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

7.12.9.6圆函数

概要

#include <math.h>
double round(double x);
float roundf(float x);
long double roundl(long double x);
Run Code Online (Sandbox Code Playgroud)

描述

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

返回

round函数返回圆整数值.

资料来源:C99标准(ISO/IEC 9899:1999).本节在C11标准(ISO/IEC 9899:2011)中没有变化.

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

  • `round` 不执行舍入到最接近的值(又名银行家舍入)。而不是幼稚的小学舍入从零舍入一半,这对于浮点算术的任何合法使用几乎总是错误的。 (2认同)