cho*_*own 20

由于ints不能存储浮点数,浮点数的小数部分将被截断,你将留下整数:

float x = 3.14159;
int y = (int)x;
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为int它只能存储整数,所以它只存储整数部分x


另请参见gnu C库舍入函数:

 — Function: double ceil (double x)
 — Function: float ceilf (float x)
 — Function: long double ceill (long double x)
 — Function: double floor (double x)
 — Function: float floorf (float x)
 — Function: long double floorl (long double x)
 — Function: double trunc (double x)
 — Function: float truncf (float x)
 — Function: long double truncl (long double x)
 — Function: double rint (double x)
 — Function: float rintf (float x)
 — Function: long double rintl (long double x)
 — Function: double nearbyint (double x)
 — Function: float nearbyintf (float x)
 — Function: long double nearbyintl (long double x)
 — Function: double round (double x)
 — Function: float roundf (float x)
 — Function: long double roundl (long double x)
 — Function: long int lrint (double x)
 — Function: long int lrintf (float x)
 — Function: long int lrintl (long double x)
 — Function: long long int llrint (double x)
 — Function: long long int llrintf (float x)
 — Function: long long int llrintl (long double x)
 — Function: long int lround (double x)
 — Function: long int lroundf (float x)
 — Function: long int lroundl (long double x)
 — Function: long long int llround (double x)
 — Function: long long int llroundf (float x)
 — Function: long long int llroundl (long double x)
 — Function: double modf (double value, double *integer-part)
 — Function: float modff (float value, float *integer-part)
 — Function: long double modfl (long double value, long double *integer-part)
Run Code Online (Sandbox Code Playgroud)

  • 如果OP确实想要舍入(而不是你所指出的截断),那么使用`ceil()`可能会有所帮助. (2认同)

Ada*_*ach 11

但是如果只是将它转换为int,则3.999也等于3.

float value = 3.14159f;
int intValue = (int)value;
float fractional = fmodf(value, (float)intValue);
if(fractional > .5f)
    intValue++;
Run Code Online (Sandbox Code Playgroud)

intValue是你的圆形int.