C - 将变量转换为 int 与 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 <math.h>
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)中没有变化。

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

最新更新