c语言强制转换四舍五入

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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冰霜雪月|六级

相关文档
最新文档