c语言强制转换四舍五入
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在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匿名|分类:C/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)|110
r1renhw|八级采纳率34%
擅长: C/C++ 数据结构及算法 C#/.NET JavaScript
其他类似问题
∙2007-12-25c语言中可以用强制类型转换8
∙2010-01-31c语言强制类型转换5
∙2013-04-30C语言中强制类型转换问题2
∙2013-10-14c语言题目强制类型转换1
更多关于c语言强制转换四舍五入的问题>>
按默认排序|按时间排序
其他3条回答
2012-03-11 17:56123冰霜雪月|六级