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条)

报告相同问题?

悬赏问题

  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'