2011-10-23 91 views

回答

12

如果浮点数超出范围int,转换为int将不起作用。

使用"%.0f"打印不会截断,因此4.75会打印为5

如果你的编译器(更准确的说,你的运行时库)支持它们的trunc()truncf(),并且truncl()功能,<math.h>宣布,你想要什么:

printf("%.0f\n", trunc(x)); 

这些功能在C99是新,所以你的编译器可能不支持它们。 C90确实提供floor()功能;如果您为负数编写一些特殊情况代码,则可以使用该代码。

4

您可以把X作为一个int(投):

NSLog("%d", (int)x); 

注意:这将不圆,它将截断值,只返回整数部分。

编辑:请注意,这不是一个安全的方式来截断所有可能的浮动值,它将适用于小值虽然(那些拟合在int)。

+1

但是,如果x超出'INT_MIN' ..'INT_MAX'范围,它将会失败。 –

+0

如果您愿意,可以使用long long或unsigned来根据需要增加可用范围。 – jv42

+0

在我听说的每个实现中,最大的整数类型太窄而无法保存最窄的浮点类型的全部范围。还有'trunc()'。 –