回 帖 发 新 帖 刷新版面

主题:用scanf输入float型的变量的时候精度缺失的现象

大家好,我最近在学习C语言,作为一个初学者有些不太明白的地方向各位高手请教一下。

我写了一段代码,想用scanf函数输入一个float的数值,做计算。但是在输入过程中发现
我输入的值有的时候会出现误差,我怀疑是精度的问题,但是不知道怎么解决这个问题。
请大家指点一下。具体情况如下。

【code】
    .......
    float money;
    printf("Enter a money:");
    scanf("%f",&money);
    printf("money:%f\n",money);
    .......
当程序运行起来,出现Enter a money:之后,我输入123.49之后回车。
在屏幕上显示为:money:123.489998
我很诧异为什么少了那么一点,而且换个数字的话差的值就变了,不过变动
的范围是在0.000001到0.000003之间。


请问谁知道这是个什么情况,怎么才能不丢失精度,输入什么就用什么去操作呢,
有知道的朋友能指点下么,谢谢了~

回复列表 (共1个回复)

沙发

float精度不够,换成double就行了
计算机在存储浮点数的时候精度本来就有问题,看下浮点数如何转化为二进制就会明白了~~
百度一下“IEEE754标准”
如果输入的是100.255,在存储的时候要转换成IEEE754标准的32位二进制串, 输出的时候再转成10进制浮点数。  
存储的时候有误差。
浮点数默认输出是6位,并且存在一定的精度误差。
printf("%.3f",a);
可以限定输出浮点数a的三位小数.

我来回复

您尚未登录,请登录后再回复。点此登录或注册