问答详情
源自:4-3 Java线程交互之互斥与同步:守恒的能量

大佬们,求帮助!为什么我在transfer方法中添加了一个if判断的代码,为什么结果明明是100000.00,系统却认为返回的能量总值不为100000.00,执行了if内的输出语句

大佬们,求帮助!为什么我在transfer方法中添加了一个if判断的代码,为什么结果明明是100000.00,系统却认为返回的能量总值不为100000.00,执行了if内的输出语句?哪里出了问题呢!谢谢大佬们

https://img4.mukewang.com/5c9dc76a0001ac2c09010504.jpg

https://img4.mukewang.com/5c9dc76a0001385c08850529.jpg

https://img3.mukewang.com/5c9dc7770001a21e09310608.jpg


提问者:霸气小肆毛 2019-03-29 15:24

个回答

  • tiger爱小狄
    2019-07-09 15:35:09

    这涉及到浮点型精度不准确问题,建议你把两边都转成int类型,进行比较

  • 笑傲独行侠
    2019-05-21 17:02:41

    楼上说的对,getTotal返回的准确值未必是100000.00,只是格式化之后舍弃了一些东西才显示的是100000.00

  • wm8888
    2019-04-01 22:31:13

    打印一下getTotalEnergies的返回值,这个方法返回值是一个double类型的值,存储的并不一定就是100000.00,这个是格式化后的数字

    System.out.print(Thread.currentThread().getName());
    energyBoxes[from] -= amount;			
    System.out.printf("从%d转移%10.2f单位能量到%d", from, amount, to);			
    energyBoxes[to] += amount;			
    System.out.printf(" 能量总和:%10.2f%n", getTotalEnergies());			
    System.out.println("能量总和:"+getTotalEnergies());			
    //唤醒所有在lockObj对象上等待的线程			
    lockObj.notifyAll();

    打印结果

    能量总和:100000.00000000004
    TransferThread_58从58转移    388.33单位能量到53 能量总和: 100000.00
    能量总和:100000.00000000004
    TransferThread_93从93转移    647.33单位能量到82 能量总和: 100000.00
    能量总和:100000.00000000004
    TransferThread_4从4转移    112.60单位能量到33 能量总和: 100000.00
    能量总和:100000.00000000004
    TransferThread_76从76转移    652.61单位能量到96 能量总和: 100000.00
    能量总和:100000.00000000004
    TransferThread_27从27转移    365.66单位能量到80 能量总和: 100000.00
    能量总和:100000.00000000004
    TransferThread_26从26转移     99.96单位能量到51 能量总和: 100000.00
    能量总和:100000.00000000004
    TransferThread_51从51转移      3.95单位能量到43 能量总和: 100000.00
    能量总和:100000.00000000003
    TransferThread_76从76转移    531.46单位能量到24 能量总和: 100000.00
    能量总和:100000.00000000003
    TransferThread_72从72转移    250.74单位能量到88 能量总和: 100000.00
    能量总和:100000.00000000003
    TransferThread_74从74转移    163.45单位能量到15 能量总和: 100000.00
    能量总和:100000.00000000003
    TransferThread_0从0转移    954.86单位能量到57 能量总和: 100000.00
    能量总和:100000.00000000001
    TransferThread_82从82转移    672.90单位能量到35 能量总和: 100000.00
    能量总和:100000.00000000001