java中两个整数相除获得浮点数会丢失精度么

看到一串代码

 int a=1099;  
 int b=93; 
 float num= (float)a/b;  

我记得浮点数做运算会丢失精度,例如

public class Test{
    public static void main(String args[]){
        System.out.println(0.05+0.01);
        System.out.println(1.0-0.42);
        System.out.println(4.015*100);
        System.out.println(123.3/100);
    }
}

结果:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999

像这样两个整形数相除获得浮点数,会有精度问题么?

补充:

如果是取小数点后几位的话,这样计算的结果可靠么?
阅读 6.8k
4 个回答

数学中的小数是无限的,计算机中的能表示的浮点数是有限的,肯定有精度问题啊.

public static void main( String[] args )
    {
        double d=4.015*100;
        System.out.println(d);
    }

输出结果:
401.49999999999994
所以取小数点后几位并不可靠.

不是“浮点数做运算会丢失精度”,而是浮点数本身存储方式决定其精度有限

感觉自己顿悟了。。。。
两个整形相除应该还是整形。我的例子里面把整形数变成了浮点数再除,肯定是有精度问题的。

用BigDecimal就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题