程序没错,运行结果为什么少1???

来源:百度知道 编辑:UC知道 时间:2024/05/30 13:27:27
#include <stdio.h>
void main()
{
int a,b;
a=20000;
b=a*0.075;
printf("%d",b);
}
结果应该是1500,但运行下来是1499,我看不出来错在哪里,请高手帮忙解释一下
1楼的方法试过了,不行.
TO2楼,我用TC2.0和TC++3.0都试过.都是1499.
我知道解决方法,改成float型的就可以了.我想问的是为什么用int型会少1,原因是什么.
谢谢4楼的答案,有点感觉了,但为什么整型会少1呢,20000乘以0.075等于1500,怎么会是1499啊??

这个是个 精度 损失问题。
因为计算机表示 浮点数据时候,不是绝对 精确的,都是相对精确。

所以设计浮点型数时候比大小
a==b 不是最标准的,很可能出问题。
浮点比大小一般都用两数差 小于一个数。
a-b<0.00000001 这样表示 两数相等。

你把 b 定义成 double型。

然后输出时候 强转。

printf("%d",(int)b);
或者
printf("%.d",b); 这样。

再补充点:
浮点数, 1 在计算机内,有很多种可能
可能是0.9999999999999 可能是1.000000001
也就是高位是没精确性的。

所以 整形的 a * 小数时。
他会取整 后就可能少 1 。但是 多1是不会的。。

改成b=0.075*a
试试

%d
改%f或者%x.xF试试