yuan8713 2010-08-17 10:16
浏览 170
已采纳

关于java浮点运算的问题

 

 

public static strictfp void main(String[] args) {

    double d1 = 0d;

    double d2 = 0d;

    System.out.println(d1 = 12.51111d);

    System.out.println(d2 = Math.floor(12.51111d));

    System.out.println(d1 - d2);

}

  

控制台打印:

 12.51111
 12.0
 0.5111100000000004

 

javascript里出现过同样的问题,如:alert((122.9 - 122).toFixed(19)),结果IE和火狐有细微差别。

12.51111-12.0很明显等于0.51111

0.0000000000000004的误差是怎么产生的?

有没有人能说明一下跟本的原因!

 

  • 写回答

2条回答 默认 最新

  • 「已注销」 2010-08-17 10:18
    关注

    java的运算符最后都是把操作数转换成二进制进行计算的。如果是浮点的话再转换成二进制并且进行运算的时候就会出现你上面这样的结果,所以浮点运算建议采用BigDecimal

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料