#include <stdio.h>
int main () {
/*
浮点类型
1.用于表示小数和科学计数法的数据
2.浮点类型可以简称为实型数据
float
1.单精度实型
2.可以精确到小数点后六位
3.打印float类型数据需要使用%f
如果数据为6为以上小数
那么在打印时
也只能从控制台上看到6位小数
从第七位开始会由cpu的误差机制
进行处理第七位以后的数据
4.使用%,数字f的形式
可以在控制台上打印固定位数的小数
(1)当固定位数小于精度时
会根据四舍五入的形式
对数据进行处理
(2)当固定位数大于精度时
会根据数据误差的形式
对数据进行处理
double
1.双精度实型
2.可以精确到小数点后10位数字
3.打印double类型数据时
尽量采用%lf的形式进行打印
但是在控制台上打印数据时
无论是%f还是%lf
默认只打印小数点后6位数字
4.在打印指定数位时
在超过小数点后10位以上后
double类型数据就已经出现了数据误差
只不过数据误差很小
并不会影响数据的准确性
直到在第16位时才会出现较大误差
long double
1.长双精度实型
2.可以精确到小数点后18位
3.打印时需要使用%llf打印数据
不能使用%f或%lf
否则数据在控制台上只能是0.000000
4.当使用指定位数打印时
在第15位时就会出现误差的情况
但并不是精确程度的问题
而是需要在特定设备上
才能正常显示准确位数
注意:
1.当使用科学计数法数据定义实型变量时
次方数要小于等于小数位
不能超过小数位
否则会出现程序的运行错误
实型计算
1.无论是定义还是计算
只要没有了小数部分的数据
都会在小数部分进行补0
2.整形变量在接收实型数据运算结果时
是没有小数部分的
换做用%f打印的话
甚至会出现较大误差
3.在计算机的计算中
都是采用二进制进行计算的
而二进制中是没有办法精确的表示0.1的
就像十进制中没有办法精确表示1/3一样
*/
float a = 5.985413;
printf("a = %f\n", a);//a = 5.985413
a = 5.9844134;
printf("a = %f\n", a);//a = 5.984414
printf("a = %.7f\n", a);//a = 5.9844136
printf("a = %.2f\n", a);//a = 5.98
double a0 = 6.9845327684156719;
printf("a0 = %f\n", a0);//a0 = 6.984533
printf("a0 = %lf\n", a0);//a0 = 6.984533
printf("a0 = %.10f\n", a0);//a0 = 6.9845327684
printf("a0 = %.10lf\n", a0);//a0 = 6.9845327684
printf("a0 = %.16f\n", a0);//a0 = 6.9845327684156722
printf("a0 = %.16lf\n", a0);//a0 = 6.9845327684156722
long double a1 = 9.156879642587946231;
printf("a1 = %lf\n", a1);//a1 = 0.000000
printf("a1 = %llf\n", a1);//a1 = 9.156880
printf("a1 = %.18llf\n", a1);//a1 = 9.156879642587945511
long double a2 = 12.34e2;
printf("a2 = %llf\n", a2);//a2 = 1234.000000
a2 = 1234000;
printf("a2 = %llf\n", a2);//a2 = 1234000.000000
a = 5.1 + 4.9;
printf("a = %f\n", a);//a = 10.000000
int b = 6.3+ 3.2;
printf("b = %d\n", b);//b = 9
printf("b = %f\n", b);//b = 10.000000
return 0;
}