我观察到以下令人惊讶的结果
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