为什么乘以float和double会得到比乘以两个浮点数更不准确的结果

时间:2017-04-26 15:18:50

标签: java

我观察到以下令人惊讶的结果

System.out.println((int) (5.1f * 10f)); => 51
System.out.println((int) (5.1f * 10d)); => 50

这是因为Java在乘法过程中对float进行了隐式转换,即Java实际上是这样做的......

 System.out.println((double)5.1f * 10d); => 50

并将5.1f转换为double给出结果

System.out.println((double) 5.1f);  => 5.099999904632568

我很难理解为什么投射到更精确的类型会产生不太精确的结果。我只期望从双倍到浮动,而不是从浮动到双倍的精度损失......

Double to float给出了一个不太令人惊讶的结果......

System.out.println((float) 5.1d); // => 5.1

0 个答案:

没有答案