C语言浮点数据类型..

1.处理小数

我们先前学过了整型数据类型 可以思考一下可不可以用整形数据类型储存小数

int main(){
    // 我们已经学完了整型数据类型 那么如果要用其来处理小数的话 那么合适吗 我们可以编写代码测试一下
    int a = 1.1;
    int b = 2.2;
    printf("%d\n", a);// 1
    printf("%d\n", b);// 2
    return 0;
}

我们从结果中可以看到 如果用整型储存小数的话 那么将会丢失小数部分

所以我们引入了浮点类型 首先用float单精度浮点型储存一下试试

int main(){
    float a = 1.1;
    float b = 365.12345;
    printf("%f\n", a);// 1.1
    printf("%f\n", b);// 365.123444
    return 0;
}

从结果可以看出 a这个小数被正确表示了 但是b的小数值正确表示了6位有效数字 其余位均为被正确表示
其实这个可以解释 C标准中规定 float类型至少能够表示6位有效数字 因此他正确表示了前7位 至于其余位是否被正确表示不在他的考虑范围之内

接着我们用double双精度浮点型储存一下(double的精度比float高)
但是既然改变了储存类型 那么占位符是否需要改变呢 也就是%f是否需要改变呢 答案是不需要 这个之后会讲到 即float和double都可以用%f作为占位符

int main(){
    double a = 1.1;
    double b = 365.12345;
    printf("%f\n", a);// 1.1
    printf("%f\n", b);// 365.123450
    return 0;
}

从结果可以看出 刚才float未能正确表示的365.12345 如果改用double储存的话 那么将可以被正确显示

但是虽然double类型的精度比float类型的精度要高 但是如果想要用double类型表示更高精度的数据的话 那么也难免会出现误差
如果涉及到高精度的计算领域的话 那么需要额外使用其他的方法来解决 避免误差的产生

2.浮点数占用的字节大小

之前我们在讨论整型数据类型的字节大小时 有这样一个规律就是:
数据范围越大的类型 他所占用的字节大小就越大
这个规律同样适用于浮点数:
精度越高、数据范围越大的类型 他所占用的字节大小就越大
我们可以用sizeof去测量一下float、double两者的字节大小

int main(){
    printf("%zu\n", sizeof(float));// 4
    printf("%zu\n", sizeof(double));// 8
    return 0;
}

从结果来看 顺带验证了一下我们的结论

你可能感兴趣的:(c语言,前端,javascript)