霸气小肆毛
2019-03-29 15:24
大佬们,求帮助!为什么我在transfer方法中添加了一个if判断的代码,为什么结果明明是100000.00,系统却认为返回的能量总值不为100000.00,执行了if内的输出语句?哪里出了问题呢!谢谢大佬们
这涉及到浮点型精度不准确问题,建议你把两边都转成int类型,进行比较
楼上说的对,getTotal返回的准确值未必是100000.00,只是格式化之后舍弃了一些东西才显示的是100000.00
打印一下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
深入浅出Java多线程
186088 学习 · 464 问题
相似问题