美文网首页
java 小数点后保留两位有效数字

java 小数点后保留两位有效数字

作者: le_du | 来源:发表于2018-08-21 18:14 被阅读0次

    java 小数点后保留两位有效数字

    今天偶尔用到了UI布局需要把BigDecimal格式显示出来,显示的格式是小数点后保留一位,比较可悲的是搜索的结果大同小异,基本都是五种方式。目前在国内好像出现了一种奇怪的现象,有一个人写了播放,其他人遇到类似的问题后,基本都是转载或者直接拷贝发表成自己的文章。几乎没有任何的加工和严重,更不能说出什么理由说出自己这么做,哦忘记了,可能有一条理由,那就是很多招聘jd上写着,有博客者加分。很想问一下这样简单的转载或者拷贝不加上自己的验证或者思考能加分吗?如果我是面试官,我很可能会直接pass了,为什么?太懒了,无论是手懒还是思维懒都会对自己的职业产生不利的影响。

    我自己的想法

    你可能会说你自己的想法干我毛用,的确没什么用,但是自己后悔后想起的时候可能就有毛用了。很多大虾,大侠,大神都说不要造轮子,更不要重复造轮子,要使用已经验证的直接拿来就好用的。理论上没错,但是有一点错了,那就是他们已经理解了轮子的原理,已经会早轮子了,而不是像很多人只是会用那样简单。记住别人的经验一定不适合你,别老是找相似点,那样越发的觉得自己像大神,要找不同点,这样才会像自己,最终才是大神。

    结束废话进入正题

    引入搜索结果五种保留两位小数的方法

    以下是网络常见的五种方法,这里我贴上验证的完整代码以便于其他同学验证

    public class TestJava {
    
        public static void main(String[] args) {
    
            BigDecimal bigDecimal = new BigDecimal("100.000");
            BigDecimal bigDecimal2 = new BigDecimal("0.0810");
    
            method1(bigDecimal);
            method1(bigDecimal2);
            System.out.println("----------------------------------------");
            method2(bigDecimal);
            method2(bigDecimal2);
            System.out.println("----------------------------------------");
            method3(bigDecimal);
            method3(bigDecimal2);
            System.out.println("----------------------------------------");
            method4(bigDecimal);
            method4(bigDecimal2);
            System.out.println("----------------------------------------");
            method5(bigDecimal);
            method5(bigDecimal2);
    
        }
    
        /**
         * 方法一
         * @param f
         */
        public static void method1(BigDecimal f){
            //BigDecimal bg = new BigDecimal(f);
            double f1 = f.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            System.out.println("mehtod1 result is:"+f1);
        }
    
        /**
         * 方法二
         * @param f
         */
        public static void method2(BigDecimal f){
            DecimalFormat df = new DecimalFormat("#.00");
            System.out.println("mehtod2 result is:"+df.format(f));
        }
    
        /**
         * 方法三
         * @param f
         */
        public static void method3(BigDecimal f){
            System.out.println("mehtod3 result is:"+String.format("%.2f", f));
        }
    
        /**
         * 方法四
         * @param f
         */
        public static void method4(BigDecimal f){
            NumberFormat nf = NumberFormat.getNumberInstance();
            nf.setMaximumFractionDigits(2);
            System.out.println("mehtod4 result is:"+nf.format(f));
        }
    
        /**
         * 方法五
         * @param f
         */
        public static void method5(BigDecimal f){
            float floatValue= f.floatValue();
            float num=(float)(Math.round(floatValue*100)/100);
            System.out.println("mehtod5 result is:"+num);
        }
    }
    

    验证结果

    mehtod1 result is:100.0
    mehtod1 result is:0.08
    ----------------------------------------
    mehtod2 result is:100.00
    mehtod2 result is:.08
    ----------------------------------------
    mehtod3 result is:100.00
    mehtod3 result is:0.08
    ----------------------------------------
    mehtod4 result is:100
    mehtod4 result is:0.08
    ----------------------------------------
    mehtod5 result is:100.0
    mehtod5 result is:0.0
    

    看出什么了吗?仅仅把代码贴到IDE里面验证一下就可以得出上面的结论。这里是有BigDecimal来兼容所有数字类型。

    得出的结论

    目前只有第三种办法字符串处理是比较好用的,但是效率却不是最高的,有没有更好的答案呢?一定有的,欢迎来砸,如果我自己找到也补充上。

    相关文章

      网友评论

          本文标题:java 小数点后保留两位有效数字

          本文链接:https://www.haomeiwen.com/subject/atbjiftx.html