在C++和Java中可以看出,m1在C++和java中都保存为浮点型,但是为什么C++输出是1呢?
难道是C++的控制台自动四舍五入了嘛?为什么不和Java一样输出小数呢?
以下是代码
在C++中(使用的CLion):
#include <cstdio>
using namespace std;
int main(){
double m = 43.01;
double m1 = m - 43;
double m2 = m1*100;
printf("%lf\n",m2);
printf("%d\n",(int)m2);
return 0;
}
结果是:
1.000000
0
在Java中(使用的IDEA):
public class Q {
public static void main(String[] args) {
double m = 43.01;
double m1 = m - 43;
double m2 = m1 * 100;
System.out.println(m2);
System.out.println((int)m2);
}
}
结果是:
0.999999999999801
0
因为浮点型进行四则运算,会存在精度丢失问题。
在c语言中,浮点型%lf输出默认保留6位小数,会进行四舍五入,所以得到的结果是1.000000
保留20位小数,得到的结果就相似了。