(int)someValue
我已经在几个不准确的地方看到它,而是问题需要该round()
功能。两者有什么区别?
具体来说,如果需要,对于 C99 C。我在用 java 编写程序时也看到了同样的问题。
在将float
/double
值转换为 的情况下,由于整数截断int
,您通常会丢失小数部分。
这与我们通常期望的舍入完全不同,因此例如 2.8 以整数截断结束为 2,就像 2.1 以 2 结束一样。
更新:
强制转换的另一个潜在(严重)不准确的来源是由于能够用整数而不是浮点类型表示的值范围有限(感谢@R在下面的评论中提醒我们这一点)
int
截断浮点数,也就是说,它会删除小数部分。 round
函数返回最接近的整数。中途情况从零四舍五入,例如round(-1.5)
is-2
和round(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);
描述
无论当前的舍入方向如何,这些
round
函数将其参数舍入为浮点格式的最接近的整数值,从零开始舍入一半的情况。退货
这些
round
函数返回四舍五入的整数值。
来源:C99 标准 ( ISO/IEC 9899:1999 )。本部分在 C11 标准 ( ISO/IEC 9899:2011 )中没有变化。
(有兴趣的可以看一下舍入算法的清晰介绍。)