我在几个地方看到过它,(int)someValue
不准确,相反,问题需要round()
函数。两者有什么区别?
具体来说,如果需要,对于 C99 C。在用java编写程序时,我也在我的程序中看到了同样的问题。
在将 float
/double
值转换为 int
的情况下,由于整数截断,您通常会丢失小数部分。
这与我们通常期望的舍入完全不同,因此例如 2.8 以整数截断结束为 2,就像 2.1 最终为 2 一样。
更新:
铸造的潜在(严重)不准确性的另一个来源是由于能够用整数表示的值范围有限,而不是浮点类型(感谢@R在下面的评论中提醒我们这一点)
- 转换为
int
会截断浮点数,即删除小数部分。 round
函数返回最接近的整数。中途情况从零四舍五入,例如,round(-1.5)
-2
,round(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)中没有变化。
(对于那些感兴趣的人,这里有一个关于舍入算法的清晰介绍。