C语言怎么精确浮点型变量到小数点后一位,例如0.1+0.1,它就显示0.200000003,我后期还会用这个数作计算

能不能用printf语句以外的方法将0.2后面那些数字删去

float无法精确表示0.2,可以考虑用整型数据保存2,当成0.2来使用,比如计算0.1+0.1可以计算1+1=2,这个2就是0.2

在计算机程序设计中,浮点数是不能指望精确存储或计算的,一定有误差,可以考虑控制误差的办法解决这个问题。

追问

如果让c-0.2,那怎么让c显示0

追答

float c=0.1+0.1,d; int b;
d=c-0.2; printf("%.1f",d); //printf默认使用用四舍五入方法
b=d*10+0.5; d=b/10; //首先利用四舍五入计算后取整,然后利用整数截断尾数

追问

有没有不用printf语句的办法

追答

这个就是不用printf的方法,结果在d中保存
float c=0.1+0.1,d; int b; d=c-0.2; b=d*10+0.5; d=b/10;

追问

谢谢,不过这仍然不是我要的算法。我已经想明白了,在计算的时候让c先乘10就好了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-20
做不到,这是因为浮点数本身无法精确表示十进制的0.1。你可以改用double型,这样最多可以精确到小数点后16位。除非你的精度需求达到或者超过了小数点后16位,否则double已经完全足够你使用了。在输出时用cout<<fixed<<setprecision(1)可只保留显示小数点后1位数字。
相似回答