2012-06-25 24 views
1

当我执行除法操作时会出现问题。我想知道是谁给截断了一些带有小数点为整数,如2,4,67如何将小数点的数字截断为int?这有什么功能?

+0

什么语言?什么环境? –

+0

我认为标签标识为C.环境应该没有关系。 –

+0

“当我进行除法操作时” - >是使用整数操作数还是浮点数的除法?一个好的答案取决于这个。 – chux

回答

4

它会自动截断是分配价值为“int”变量:

int c;  
c = a/b; 

或者你可以施放这样的:

c = (int) (a/b); 

这截断它,即使c定义为float或double。

通常截断不是最好的(取决于你想要达到的目标)。通常结果是这样取整的:

c= round(a/b,0); 

更聪明,因为正确结果。如果你使用linux,你可以很容易地获得有关确切数据类型的“man round”的参考信息。

+0

非常感谢。我会尝试一轮()和演员。 –

+0

如果这回答你的问题,你可以把它标记为“接受”:) –

+3

在'c =(int)a/b;'中,这个转换适用于'a',而不是'a/b'。如果你想转换'a/b',你需要括号:'c =(int)(a/b);'。 –

1

手动或隐式地从浮点类型转换为整型会导致向零自动截断。请记住,如果积分类型不足以存储该值,则会发生溢出。如果你只需要打印带有一切都会过去的小数点截断值,使用printf()

printf("%.0f", floor(float_val)); 

随着托纳·塞缪尔指出,这printf()调用实际上将全面默认浮点参数。

+1

这个%.0f不是截断的,而是我知道的圆整。 –

+1

@TõnuSamuel,你是对的,我会修改我的答案。 –

+0

使用'trunc()'截断更有意义的是'floor()'。使用'truncf()'对于'float float_val'甚至更有意义。 – chux

1
int result = (int)ceilf(myFloat); 
int result = (int)roundf(myFloat); 
int result = (int)floor(myFloat); 

float result = ceilf(myFloat); 
float result = roundf(myFloat); 
float result = floor(myFloat); 

我认为这会对您有所帮助。

+0

由于OP询问“如何截断数字...”,我建议添加'truncf()'。 – chux

1

您可以使用math.h中定义的trunc()函数。它将删除小数部分,并返回不大于给定数字的最近整数。

这是它是如何定义的:

double trunc(double x); 

下面是你如何使用它:

double a = 18.67; 
double b = 3.8; 
int c = trunc(a/b); 

您可以检查在Linux上man trunc,以获取有关该功能的详细信息。正如在前面的答案中指出的那样,你可以将除法结果转换为整数,或者如果分配给整数,它将自动截断,但如果你有兴趣了解一个C作用,那么作业就是trunc()

+0

@Yannis,感谢您提出修改建议。 – kriti

+0

到目前为止最好的答案。 – chux