当我进行除法运算时会出现问题。我想知道谁将带小数点的数字截断为整数,例如 2、4、67。
问问题
28781 次
4 回答
6
如果您将值分配给“int”变量,它会自动截断:
int c;
c = a/b;
或者你可以像这样投射:
c = (int) (a/b);
即使 c 定义为 float 或 double,这也会截断它。
通常截断不是最好的(当然取决于你想要达到的目标)。通常结果是这样四舍五入的:
c= round(a/b,0);
更智能,因为回合结果正确。如果您使用 linux,您可以通过“man round”轻松获得有关确切数据类型等的参考。
于 2012-06-25T06:24:59.500 回答
3
您可以使用中trunc()
定义的函数math.h
。它将删除小数部分并返回不大于给定数字的最接近的整数。
它是这样定义的:
double trunc(double x);
以下是如何使用它:
double a = 18.67;
double b = 3.8;
int c = trunc(a/b);
您可以man trunc
在 Linux 上查看以获取有关此功能的更多详细信息。正如前面的答案所指出的,您可以将除法结果转换为整数,或者如果分配给整数,它将自动被截断,但如果您有兴趣了解一个可以完成这项工作的 C 函数,那么trunc()
就是这个。
于 2017-12-22T16:28:11.090 回答
1
从浮点类型手动或隐式转换为整数类型会导致自动截断为零。请记住,如果整数类型不足以存储值,则会发生溢出。如果您只需要打印值并截断小数点后的所有内容,请使用printf()
:
printf("%.0f", floor(float_val));
正如 Tõnu Samuel 指出的那样,printf()
默认情况下,该调用实际上将舍入浮点参数。
于 2012-06-25T06:31:43.573 回答
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);
我想这会对你有所帮助。
于 2012-06-25T06:34:48.333 回答