开启掘金成长之旅!这是我参与「掘金日新计划 · 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 天,点击查看活动详情