前言
今天游戏包测试发现一个问题,有一个后台配置的商品,配置价格为4.99美刀,在客户端看到的却是4.98美刀。第一感觉是类型转换精度上出了问题,于是做了以下测试。
实例
- 错误代码
public static void main(String[] args) {
try {
float f = 4.99f;
log.info((f*100)+"");
}
}
错误结果
改正代码 用到BigDecimal
float f = 4.99f;
BigDecimal b = new BigDecimal(Float.toString(f));
BigDecimal c = new BigDecimal(Float.toString(100f));
log.info((int)(b.multiply(c).floatValue())+"");
正确结果
结语
处理精确的数字时还得上BigDecimal,浮点数靠边站 。