c语言强制转换四舍五入
在C语言中,强制转换后的数是四舍五入还是去尾?去尾要想四舍五入的话(int)(number+0.5)都是直接去尾的。当为数太多时直接截断。所以在强制转换时要很注意C语言有没有数据的四舍五入?什么情况下会用到四舍五入?数据类型转换?有四舍五入的情况,在你想要保留几位小数的时候,多余的紧接着的一位要四舍五入不过C里面没有提供四舍五入的函数,不过你可以这样 a = (int)(a*100 + 0.5)/100这只是一个小技巧,对a的第三位进行四舍五入提问者评价+0.5可以解决这个问题!谢谢你!C语言中的float和double类型数据是浮点数,所以小数部分就存在四舍五入问题,当指定输出位数在精度范围之内时,系统会自动舍入,无需人工干预,如果小数部分也在精度范围内,比如10.0/2.0 = 5.0,2位以上的输出位数时,后面的都是0,此时,当然不需要舍入了。数据类型转换有两种方式,一种是默认强制转换,比如将char、short、Int、Long和float类型数据赋给double类型变量时,编译程序会自动实施转换,这是因为,在精度更高时,这样的转换是内有损失的。另一种是手动强制类型转换,比如dnum = (double)inum;,意思是将整形变量inum首先转换为双精度数据,然后再付给dnum。当将高精度类型变量赋给低精度类型变量时,除非手动强制转换,否则,编译程序会有提示的。数据强制转换是用舍弃的方法,不会用四舍五入,什么时候用四舍五入是需要详细说明的,也就是你的业务需求而定,你可以把数字+0.5,然后进行强制转换ouble强制转换成int型的时候保留整数部分的。。比如double a=1.5;int b=a;a就是1。C语言强制类型转换问题2012-03-11 17:52匿名?|?分类:/browse/866C/C++?|?浏览2634次int a,b; //keil c里的int,也就是16位。a=0000; b=0x1234;a=(char)(b);问题:此时a的值是?a的类型是?分享到:2012-03-11 19:08提问者采纳你好! 一步一步来 int a,b; 这句的功能是操作系统为 变量a,b分别分配一块空闲的存储空间 以后使用a,b将相当于访问各自所对应的 存储空间a = 0000;b = Ox1234; 这句的功能是 把0000放到变量a所对应的存储空间 把0x1234放到变量b所对应的存储空间重点是下面这句a = (char)(b) 它的功能相当于修改变量a的值, 具体是这样操作的,从b所对应的存储空间中取出 b的值即0x1234,然后把他转换成char类型,再然后将 转换后的结果放到变量a所对应的存储空间,即覆盖掉 原来的0000 这个转换后的结果又是多少呢,是这样算的 通常在C中int类型占4个字节 而char类型占1个字节 如果把一个int类型的数据以char类型输出,那么,编译器 会自动丢弃int类型的前3个字节的内容 对应本题 int类型的数据b是0X1234 为十六进制 在计算机中是这样存储的 0000 0000 0000 0000 0001 0010 0011 0100共4个字节 转换成char类型后,前3个字节丢弃 即结果是0011 0100 共1个字节 对应的十进制是52 当语句a = (char)(b)执行完后 这1个字节的值也就是52就放到了变量a所对应的存储空间, 而不是原来的0000了 所以,整个过程并没有改变变量a和b的数据类型 原来是int类型现在还是int型,程序只是修改了变量a 的值,连b的值都没有修改,因为修改a的值时只是从b所 对应的存储空间里把b的值取出来用一用,用的结果是修改成 char类型,但他把修改后的结果放到a所对应的存储空间了, 并没有放到b所对应的存储空间,所以原来b所对应的值没有被 覆盖,原来是0X1234,现在还是0X1234仅供参考!呵呵追问晕,你肯定是用VC的,所以在你理解里,int型的为32位,而我题目中就说了,我用的是keil c,一个int型的点2个字节,也就是16位。当然这不影响理解“强制转换”这个概念。总之,你的意思是:a=(char)(b);的结果是:a==0x0034,int型,b==0x1234,int型,对吗?回答最终结果 : 变量a: int类型,其值是0x0034 变量b: int类型,其值不变,还是0x1234 我说的的确是vc中的,你的int类型是16个字节 那过程应该也一样,应该不影响你理解 呵呵提问者评价嗯,呵呵,谢谢大师!!评论(3)?|?11?0/p/r1renhw?from=zhidaor1renhw?|?/search/zhidao_help.html八级?采纳率34%擅长:?/browse/866C/