Java float (x.99乘以100的坑)

前言

今天游戏包测试发现一个问题,有一个后台配置的商品,配置价格为4.99美刀,在客户端看到的却是4.98美刀。第一感觉是类型转换精度上出了问题,于是做了以下测试。

实例

  • 错误代码
    public static void main(String[] args) {
        try {

                float f = 4.99f;

                log.info((f*100)+"");

            }
    }
  • 错误结果

    Java float (x.99乘以100的坑)_第1张图片

  • 改正代码 用到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())+"");
  • 正确结果

    Java float (x.99乘以100的坑)_第2张图片

结语

处理精确的数字时还得上BigDecimal,浮点数靠边站 。

你可能感兴趣的:(杂)