1. 前提知识
- 浮点数在计算机中是以二进制的形式存储的,大部分浮点数都无法精确表达
- 银行家舍入法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
2. 碰到的问题
我在对浮点数做保留两位小数并四舍五入的操作时,测试的时候发现在JDK 8和Android 5.1上得到的值是不一样的。
代码:
public static void main(String[] args) {
System.out.println(String.format("5.585f -> %.2f", 5.585f));
System.out.println(String.format("5.535f -> %.2f", 5.535f));
System.out.println(String.format("5.545f -> %.2f", 5.545f));
System.out.println(String.format("5.555f -> %.2f", 5.555f));
System.out.println("------------------------------");
System.out.println(String.format("5.585 -> %.2f", Double.valueOf(String.valueOf(5.585f))));
System.out.println(String.format("5.535 -> %.2f", Double.valueOf(String.valueOf(5.535f))));
System.out.println(String.format("5.545 -> %.2f", Double.valueOf(String.valueOf(5.545f))));
System.out.println(String.format("5.555 -> %.2f", Double.valueOf(String.valueOf(5.555f))));
System.out.println("------------------------------");
System.out.println(String.format("558.5f -> %.0f", 558.5f));
System.out.println(String.format("553.5f -> %.0f", 553.5f));
System.out.println(String.format("554.5f -> %.0f", 554.5f));
System.out.println(String.format("555.5f -> %.0f", 555.5f));
System.out.println("------------------------------");