double型数据的强制转换问题

 我来答
世纪网络17
2022-09-30 · TA获得超过5903个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:137万
展开全部
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

c++中,我写了这样几句:double a=8888.88;a=(int)(a*100);cout<<a;

我以为结果会是8888.88,而事实却是888887,改成a=(long)(a*100)也是一样的,这是为什么呢?

解析:

二楼的没把关键问题说到,问题也不是在于低精度数据类型向高精度数据类型的转换时的精度丢失。

1.因为double型用于表示有效数值的位数是有限的,所以对于许多十进制小数,它们转换为相应的二进制小数时,要求非常之多甚至是无限的位数(与十进制里的无穷小数类似),对于这些十进制小数double在表示时只能采取一定位数的近似。这个就是浮点数的近似表示,问题关键是这一层次上的精度缺失。

8888.88就是这样一个数。也就是说计算机中保存的值类似于8888.87999...9(强调,类似。精确地写出来很麻烦)。

2、a*100结果为 888887.999...9

转换时,将小数点后的数全部截去得888887

3、大多数都会出现这样的问题,但不是所有的,比如7777.75相同的运算就应该还是777775。

4、参见:十进制与二进制数之间的转换。

float/double型数据的硬件实现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式