如何将带小数点的数字截断为int?它的功能是什么?

问题描述 投票:2回答:4

当我进行除法运算时会出现问题。我想知道谁将一个带小数点的数字截断为整数,如2,4,67。

c
4个回答
5
投票

它自动截断是你为“int”变量赋值:

int c;    
c = a/b;

或者你可以像这样投射:

c = (int) (a/b);

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

通常截断不是最好的(取决于你想要实现的目标)。通常结果如下四舍五入:

c= round(a/b,0);

更加智能,因为轮次结果正常。如果你使用linux,你可以很容易地获得关于确切数据类型的“man round”的参考。


2
投票

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

这是如何定义的:

double trunc(double x);

以下是如何使用它:

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

您可以在Linux上查看man trunc以获取有关此功能的更多详细信息。正如之前的答案中所指出的,你可以将除法结果转换为整数,如果分配给整数,它会自动截断,但如果你有兴趣了解一个C函数,那么trunc()就是那个。


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);

我认为这对你有所帮助。


1
投票

从浮点类型手动或隐式转换为整数类型会导致自动截断为零。请记住,如果积分类型不足以存储该值,则会发生溢出。如果您只需要在截断小数点后的所有内容中打印该值,请使用printf()

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

正如TõnuSamuel指出的那样,printf()调用实际上将默认围绕浮点参数。

© www.soinside.com 2019 - 2024. All rights reserved.