c语言中,float类型的数据被强制转换成int类型是,是小数位四舍五入还是只保留整数? 求解??

如题所述

几种取整方法验证程序,如下,可以编译运行体会下

int强制转换是不保留小数的。

ceil是向上取整,floor是向上取整,这两个函数返回值是double类型的

c语言中没有四舍五入函数,需要使用时可以自己定义下。

#include <math.h>
#include <stdio.h>
// 自定义四舍五入宏
#define ROUND(x) (int)(x + 0.4999999999999999)
double round(double x, int d) // d为保留数字位数
{
double y = pow(10, d);
return floor(x * y + 0.5) / y;
}
double round(double x, double d) // d为圆整精度
{
return floor(x / d + 0.5) * d;
}

void main()
{
double a = 3.0;
int i;
for(i=0; i<10; i++, a+=0.1)
printf("%f\t%d\t%d\t%d\t%d\n", a, (int)a, (int)ceil(a), (int)floor(a), ROUND(a));
double x = 53.1415926;
for(i=-1; i<5; i++) printf("%f\t", round(x, i));
printf("%f\t", round(x, 0.037));
}

追问

谢谢~~

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-11
只会保留整数。有个函数是四舍五入的

c语言中,float类型的数据被强制转换成int类型是,是小数位四舍五入还 ...
int强制转换是不保留小数的。ceil是向上取整,floor是向上取整,这两个函数返回值是double类型的 c语言中没有四舍五入函数,需要使用时可以自己定义下。include <math.h>#include <stdio.h>\/\/ 自定义四舍五入宏#define ROUND(x) (int)(x + 0.4999999999999999)double round(double x, int d) \/...

c语言在由float强制转换int的情况下小数部分会不会变??
强制转换的话,小数部分将被舍去,不会进行四舍五入处理。比如浮点数13.45,如果转换为整数为13,浮点数13.87,如果转换为整数仍然为13.

强制类型转换,为什么结果给四舍五入了
当float型强制转化成int型时截取整数舍去小数部分,此时运算结果不遵循四舍五入原则。当其他类型强制转化为float类型时默认保留6位小数,此时运算结果遵循四舍五入原则。这是C语言的一种规定。

c语言中将一个浮点型赋值给整型时,会不会四舍五入?
c语言中将一个浮点型赋值给整型时,不会四舍五入,会直接舍去小数部分的数据,也可以认为是执行了下取整运算。将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换...

c语言中将一个浮点型赋值给整型时,会不会四舍五入?
具体来说,无论是单精度浮点型还是双精度浮点型转换为整数,都只保留整数部分,单精度的尾部0会被保留,但double转float时,可能会根据编程语言的不同进行四舍五入。在字符(char)和整数(int)的类型转换中,char的值会被截断到最低8位,而char大于127时可能被视为负数。至于int和long型的转换,long型...

...int)转换时,计算机是按照四舍五入呢?还是只取整数部分?
是只取整数部分的。也就是,可能是1.999999999 然后转换为int就是1,所以 浮点数向int转换,会丢失精度。为了避免这个,建议如果想取到整数部分。可以使用 float b;int a;a=(b+0.5);这样写的话,就是四舍五入。如果 写成 a=b.可能有 0.99999999999 被截断,a就是0的情况。

浮点数强制转换成整型为什么只取整数部分
浮点数可以存储小数部分,整数只能存储整数,float a =0.123; int b =0;b =(int)a; \/\/这样整型变量只能取a的整数部分,如果你想把浮点变量的小数 部分也保存,比如a=0.123;想b=123,那么就这样;b=(int)(a*1000);然后运算b的时候记住b需要除1000才是实际的值。

C语言有没有数据的四舍五入?什么情况下会用到四舍五入?数据类型...
C语言中的float和double类型数据是浮点数,所以小数部分就存在四舍五入问题,当指定输出位数在精度范围之内时,系统会自动舍入,无需人工干预,如果小数部分也在精度范围内,比如10.0\/2.0 = 5.0,2位以上的输出位数时,后面的都是0,此时,当然不需要舍入了。数据类型转换有两种方式,一种是默认...

float型的变量如何转换为int型?
变量”,则对应变量被转换为括号中 的类型,因此想把浮点型转换为整型时,括号中使用int即可:如果直接把浮点型变量赋值给整型,其会自动转换为整型:但是注意当float型变量转换为整型时,小数部分被舍弃,但不会遵循四舍五入的原则,如果浮点类型的值过大,超过整型所能容纳的范围,则结果是不确定的。

java中,强制转换符把float转换为int时,按四舍五入,还是直接丢掉小数部 ...
直接舍掉小数。例如:int 3.14,结果为 Int是将一个数值向下取整为最接近的整数的函数。INT是数据库中常用函数中的取整函数,常用来判别一个数能否被另一个数整除。

相似回答