计算机小数计算的精度丢失问题
代码中计算0.09和0.01之和,并且将其结果在控制台进行输出。那么我们想当然的会以为在控制台输出的结果应该为0.1。那么实际的运行结果是什么呢?控制台的输出如下:这样的结果其实就是一个丢失精度的结果。为什么会产生精度丢失呢?
·
问题描述
public static void main(String[] args) {
System.out.println(0.09 + 0.01);
}
代码中计算0.09和0.01之和,并且将其结果在控制台进行输出。那么我们想当然的会以为在控制台输出的结果应该为0.1。那么实际的运行结果是什么呢?
控制台的输出如下:
0.09999999999999999
这样的结果其实就是一个丢失精度的结果。为什么会产生精度丢失呢?
原因分析:
在使用float或者double类型的数据在进行数学运算的时候,很有可能会产生精度丢失问题。
- 计算机底层在进行运算的时候,使用的都是二进制数据; 当我们在程序中写了一个十进制数据 ,在进行运算的时候,计算机会将这个十进制数据转换成二进制数据,然后再进行运算,计算完毕以后计算机会把运算的结果再转换成十进制数据给我们展示。
- 如果我们使用的是
整数类型的数据进行计算,那么在把十进制数据转换成二进制数据的时候就不会存在精度问题。 - 如果我们的数据是一个
浮点类型的数据,计算机底层有的时候并不会将这个数据完全转换成一个二进制数据,在将它转换为二进制计算时可能会产生无限循环小数,由于计算机只能用有限的位数近似存储数据,这样不可避免地产生了舍入误差导致数据不准确, 最终就会造成精度丢失。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)