编程论坛's Archiver

ospf 发表于 2008-7-9 00:07

程序输出结果跟预期结果不一样,为什么会这样呢?

#include<stdio.h>
int main(void)
{
    float i=1000000.1;
    printf("%f",i*0.01);
    return 0;
}

vc输出结果是10000.001250,为什么不是10000.001呢?

Rand 发表于 2008-7-9 00:40

精度问题,0.1无法用二进制准确表示,你换成0.25(0.25=2^-2)就可以准确表示,你可以试试。

独孤小梦 发表于 2008-7-9 00:48

LS正解~

mingshendeshou 发表于 2008-7-9 11:07

知道了

ospf 发表于 2008-7-9 22:49

[quote][bo][un]Rand[/un] 在 2008-7-9 00:40 的发言:[/bo]

精度问题,0.1无法用二进制准确表示,你换成0.25(0.25=2^-2)就可以准确表示,你可以试试。 [/quote]

我觉得应该也是精度问题,但是你说的还是有问题,你看下面的程序,为什么就能正确输出0.00100呢?
#include<stdio.h>

int main(void)
{
        float a=0.1;
        printf("%f",a*0.01);
    return 0;
}

ospf 发表于 2008-7-11 20:15

ding yi ge

水中无月 发表于 2008-7-11 20:48

float a=0.1;
改成
float a=0.1f;//注意“f”
这样就不需要a*0.01了,直接
printf("%f",a);

ospf 发表于 2008-7-12 09:49

感谢你的热心,但是我不明白你的意思,能否详细解释一下啊,谢谢!

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.