鱼C论坛

 找回密码
 立即注册
查看: 2343|回复: 5

c语言关于变量的问题为什么每次乘出来的结果不对

[复制链接]
发表于 2017-8-19 21:35:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int main()
{
        float a=10.35;
        double c =a;

        for (int b=1; b<=15;b++)
        {
                c = c*10.0;
                printf("\n第%d次c=%f",b,c);
        }
        return 0;
}//比如每次都比原结果多,比如第一次10.35*10.0应该等于103.500000却等于103.500004
360截图20170819203748091.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-19 21:41:01 | 显示全部楼层
2017-08-19_213902.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 22:35:24 | 显示全部楼层
double 类型的话用 %lf 输出,请参见 -> http://bbs.fishc.com/thread-66471-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-20 11:01:12 | 显示全部楼层
我找到问题了是类型进行强制转换有误差
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 00:47:34 | 显示全部楼层
想想还是写出来了,问题出在转换上,pc的编译系统,并不认识,十进制的数值,所以每次转换的时候都需要把十进制的数值转换成二进制的,这里就要说十进制小数转换成二进制的方法是*2,一直乘到没有小数为止,但是本题10.35这个十进制数,小数部分无法把小数乘没所以就出现了误差。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 10:58:18 | 显示全部楼层
b和c定义的是double型,那么输出不应该是%d,应该是%lf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表