zoukankan      html  css  js  c++  java
  • android开发系列之6*0.9不等于5.4

          昨天晚上我们客户端平台上面曝出了一个很奇诡的bug,那就是本来在客户端里面有个商品买6元,但是因为碰巧赶上打9折,这个时候我们很自然的处理就是6*0.9。好吧你以为so easy的事情,其实就出错了,我们客户端里面显示出来的是5.39。那么问题就来了,损失的那一分钱去哪了呢?

          聪明的你也许很快就会想到可能是小数点精度的问题,但是我们客户端将6和0.9都是定义成float类型的呀!不可能说会存在类型转换,精度丢失的情况。经过多次测试和查阅资料我们发现原来是java自身处理机制的问题,至于到底怎么样的一套处理机制,我在网上找到的资料也说的不是太清楚,在这里就不老王卖瓜了。我只能告诉你处理的方法,代码如下:

    public static float getRightPrice(float origionPrice, float saleOff) {
            BigDecimal bOrigionPrice = new BigDecimal(origionPrice);
            BigDecimal bSaleOff=new BigDecimal(saleOff);
            float rightPrice=bOrigionPrice.multiply(bSaleOff).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
            return rightPrice;
        }
    

     前一个参数是原始价格,也就是6;后一个参数是打折数值0.9,然后通过setScale方法设置两位小数,并且设置最接近取舍数值,这样我们就得到想要的5.4了。

  • 相关阅读:
    .Net 平台下的互联网架构新思考
    图形化机构树静态页面
    互联网应用架构谈
    解决android调用IIS Express中的WCF服务时,出现错误400问题
    远程连接sql server 数据库的方法
    WPF样式——多条件触发器
    Ubuntu 16.04 安装 RabbitMQ
    session共享个人小结
    Nginx负载均衡配置
    MySQL数据库设置主从同步
  • 原文地址:https://www.cnblogs.com/xiaocai20091687/p/xiaocai-android-float.html
Copyright © 2011-2022 走看看