Float转Long类型精度丢失问题

345 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

场景描述

带有两位小数的值,在转换成BigDecimal后获取为Float类型,然后Float值再乘以100后,获得的新Float值再转换成long类型的值,部分值(如示例)的转换结果会出现精度丢失问题。

public static void main(String[] args) {

// 错误示例
BigDecimal bigDecimal = new BigDecimal("80.84");
Float num1 = bigDecimal.floatValue() * 100;
System.out.println(num1.longValue()); // 8083

// 建议示例(直接转换成BigDecimal再进行计算)
BigDecimal bigDecimal2 = new BigDecimal("80.84");
BigDecimal bigDecimal3 = new BigDecimal("100");
System.out.println(bigDecimal2.multiply(bigDecimal3).longValue()); // 8084

}

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情