请问C语言应该输出68.200000我的是68.199997为什么

我用的是mobilc那个app在手机编译的 和书上的输出值不一样
请帮忙看下为什么
我刚学 很多不懂
先行谢过了

img

img

img

img

单双精度转化容易丢失精度,就算是从float转double也可能会丢失精度。
可能是编译器的某些原因吧。
为了保持结果的一致性,记住凡是用到浮点数通通用一种类型,double。
别一时用float,一时又用double。

img

#include<stdio.h>

int main()
{
    int a=1;
    char b='A';
    double c=2.2;
    double d=a+b+c;
    printf("%lf\n",d);    
    return 0;
}

因为浮点数本身就是近似值,不能精确运算。

不同环境下浮点数运算结果不一样是正常的

浮点数本身就是个近似值。
各个编译器的输出实现也不一样。
double输出用%lf

浮点是一个拼凑值,不是精确的。
double用%lf输出

因为计算机的浮点数用二进制阶码和尾数表示。像6.1就表示为1.10000110011001100110011... X 2^2 阶码就是那个指数2,尾数就是,10000110011001100110011.... ,长度过大的尾数会会丢掉。然后再进行浮点数加减运算。运算出来的结果当然也是失精度的。一种方法是用精度更大的数据结构,比如double,BigDecimal等。但是浮点数的A,B相等的比较最好用 abs(A-B) <= σ 的方式去做,σ 是自定义的可接受误差值,abs为绝对值函数

可以将第12行中的%f改成%.00000f试一下