綦霖
好记性不如烂笔头~ 持续写bug中...

小数点后保留六位小数的几种方法

public static void main(String[] args) {
        java.text.DecimalFormat df = new DecimalFormat("#.000000");
        java.text.NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(6);//保留小数点后几位就传几
        nf.setRoundingMode(RoundingMode.DOWN);//需要四舍五入就用 RoundingMode.UP
        double lat = 120.15784662032509;
        System.err.println(df.format(lat));//1
        System.err.println(nf.format(lat));//2
        System.err.println(String.format("%.6f",lat));//3
        System.err.println(df.format((int) Math.ceil(lat)));//向上取整 
        /**
         * Math.round() “四舍五入”, 该函数返回的是一个四舍五入后的的整数
         * Math.ceil()  “向上取整”, 即小数部分直接舍去,并向正数部分进1
         * Math.floor() “向下取整” ,即小数部分直接舍去
         */
    }

由于我处理的是经纬度需要保留小数点后六位数,有些就不适用了。

 

ps:今天再测试的时候发现 NumberFormat处理经度时总会出现取五位的情况,是因为如果截取的最后一位是0的话在格式化的时候会不显示出来。最后只能自己使用subString自己截取了。

 

public static void main(String[] args) {
        java.text.NumberFormat nf = NumberFormat.getNumberInstance();
        //nf = (DecimalFormat)nf;
        ((DecimalFormat) nf).applyPattern("#.000000");//强制转换为DecimalFormat 添加格式
        nf.setMaximumFractionDigits(6);//保留小数点后几位就传几
        nf.setRoundingMode(RoundingMode.DOWN);//需要四舍五入就用 RoundingMode.UP
        System.err.println(nf.format(136.54222032402261));//
        System.err.println(nf.format(29.939281970523797));//
        System.err.println(SubStringLaLotude(136.54222032402261));//
    }
    public static String SubStringLaLotude(Double number) {
        String strLanlot="0.000000";
        if(number>0){
            strLanlot = String.valueOf(number);
            // 获得第一个点的位置
            int index = strLanlot.indexOf(".");
            // 根据点的位置,截取 字符串。得到结果 result
            String result = strLanlot.substring(index);
            strLanlot = strLanlot.substring(0, index) + (result.length() < 7 ? result : result.substring(0, 7));// 取小数点后六位的经纬度

        }
        return strLanlot;
    }

 

有关其他的数字处理可以参考下 :https://blog.csdn.net/a1064072510/article/details/89887633 

 

public class DoubleFormat {  
  
     double f = 11.4585;    
     public void m1() {    
         BigDecimal bg = new BigDecimal(f);    
         double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();    
         System.out.println(f1);    
     }    
     /**  
      * DecimalFormat转换最简便  
      */    
     public void m2() {    
         //#.00 表示两位小数  
         DecimalFormat df = new DecimalFormat("#0.00");    
         System.out.println(df.format(f));    
     }    
       
     /**  
      * String.format打印最简便  
      */    
     public void m3() {    
         //%.2f  %.表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型  
         System.out.println(String.format("%.2f", f));    
     }    
       
     public void m4() {    
          
         NumberFormat nf = NumberFormat.getNumberInstance();    
         //digits 显示的数字位数 为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的  
         nf.setMaximumFractionDigits(2);    
         System.out.println(nf.format(f));    
     }   
       
     public static void main(String[] args) {    
         DoubleFormat f = new DoubleFormat();    
         f.m1();    
         f.m2();    
         f.m3();    
         f.m4();    
     }    
       
       
    /*      Math.floor()  通过该函数计算后的返回值是舍去小数点后的数值   
            如:Math.floor(3.2)返回3   
            Math.floor(3.9)返回3   
            Math.floor(3.0)返回3   
               
            Math.ceil()   
            ceil函数只要小数点非0,将返回整数部分+1   
            如:Math.ceil(3.2)返回4   
            Math.ceil(3.9)返回4   
            Math.ceil(3.0)返回3*/  
              
 }

posted on 2022-03-16 17:11  綦霖  阅读(5148)  评论(4编辑  收藏  举报