c语言计算有一些不准确

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:16:50
long int i,n;
scanf("%ld",&i);
n=10000+(i-100000)*0.075;

有问题的程序大致如上,从屏幕输入150000,
输出n的值应为13750,
c实际输出的值为13749。

请教高手这是什么原因?
如何解决?

不同编译器结果是不一样的,vc6.0下是13750,dev c++4.9.9.2下是13749.这个不是你程序的原因,我觉得原因可能是你这里面用到了类型转换,不同编译器最后产生的代码不太一致吧。没法解决也不用去解决。如果你想得到正确的结果就不要把运算的结果转成long类型的,你设置n是double型的。

用vc6.0编结果是13750啊,是不是你的编译器有问题

浮点数就是不精确的,使用浮点数计算得到的结果可能不精确。

浮点型计算1.0*\3再*3是不等于1的
main()
{
long int i;
float n;
scanf("%ld",&i);
n=10000+(i-100000)*0.075;
printf("%f",n);
}