• Java基础知识强化107:DecimalFormat


    1. 引入:

    如何控制输出数据的精度?

    >1. 使用Math.round方法

    (1)Java如何把一个float(double)四舍五入到小数点后2位4位,或者其它指定位数

    答:比如,如下案例:

    float a = 123.2354f;

    float b = (float)(Math.round(a*100))/100   // 输出123.24

    如果想要3位就是把2个100都换成1000

    (2)根据上面的规律,我们可以定义一个方法,专门用来四舍五入浮点数特定位数

     1 package com.himi.test1;
     2 
     3 public class CubeRootDemo {
     4 
     5     public static void main(String[] args) {
     6 
     7         //
     8         // Scanner sc = new Scanner(System.in);
     9         //
    10         // float number = sc.nextFloat();
    11         //
    12         // float result = (float)(Math.round((float)Math.cbrt(number)*10))/10;
    13         //
    14         // System.out.println(result);
    15 
    16         System.out.println(roundByDigit(123.2354, 2));
    17     }
    18 
    19     /**
    20      * 
    21      * @param number
    22      *            需要四舍五入的数据
    23      * @param digit
    24      *            精确到小数点后面的位数
    25      */
    26     private static double roundByDigit(double number, int digit) {
    27         // double temp = Math.pow(10, digit);
    28         //
    29         // double result = (double)Math.round(number*temp)/temp;
    30 
    31         return (double) Math.round(number * Math.pow(10, digit)) / Math.pow(10, digit);
    32 
    33     }
    34 
    35 }

    运行调试:

     

    >2. 使用String.format(String pattern)方法

     1 package com.himi.test5;
     2 
     3 public class Main5 {
     4     public static void main(String[] args) {
     5 
     6         double d = 3.1415926;        
     7         System.out.println(String.format("%.2f", d));
     8             
     9         
    10     }
    11 
    12 }

    输出为:

    备注:

    %.2f     %. 表示小数点前任意位数   2 表示两位小数    f 表示格式后的结果为浮点型

    2. 其实Java提供了数据格式化的类---DecimalFormat,下面就说一下DecimalFormat的使用:

    (1)首先介绍一下各种符号的含义:

    0   一个数字 

    #   一个数字,不包括 0 

    .   小数的分隔符的占位符 

    ,   分组分隔符的占位符 

    ;   分隔格式。 

    -   缺省负数前缀。 

    %  乘以100 和作为百分比显示 

    ?      乘以1000 和作为千进制货币符显示;用货币符号代替;如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符。 

    X    前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。 

    (2)特别的,'0''#' 的区别重点讲一下,如下:

    0: 
        比实际数字的位数多,不足的地方用0补上
        new DecimalFormat("00.00").format(3.14)  //结果:03.14
        new DecimalFormat("0.000").format(3.14)  //结果: 3.140
        new DecimalFormat("00.000").format(3.14)  //结果:03.140
        比实际数字的位数少:整数部分不改动,小数部分,四舍五入
        new DecimalFormat("0.000").format(13.146)  //结果:13.146
        new DecimalFormat("00.00").format(13.146)  //结果:13.15
        new DecimalFormat("0.00").format(13.146)  //结果:13.15
    #: 
        比实际数字的位数多不变
        new DecimalFormat("##.##").format(3.14)  //结果:3.14
        new DecimalFormat("#.###").format(3.14)  //结果: 3.14
        new DecimalFormat("##.###").format(3.14)  //结果:3.14
        比实际数字的位数少:整数部分不改动,小数部分,四舍五入
        new DecimalFormat("#.###").format(13.146)  //结果:13.146
        new DecimalFormat("##.##").format(13.146)  //结果:13.15
        new DecimalFormat("#.##").format(13.146)  //结果:13.15

    (3)使用DecimalFormat的示例代码,如下:

     1 package com.himi.test5;
     2 
     3 import java.text.DecimalFormat;
     4 
     5 public class Main4 {
     6     public static void main(String[] args) {
     7 
     8         DecimalFormat df1 = new DecimalFormat("0.0");
     9         System.out.println(df1.format(12.34));
    10 
    11         DecimalFormat df2 = new DecimalFormat("#.#");
    12         System.out.println(df2.format(12.34));
    13 
    14         DecimalFormat df3 = new DecimalFormat("000.000");
    15         System.out.println(df3.format(12.34));
    16 
    17         DecimalFormat df4 = new DecimalFormat("###.###");
    18         System.out.println(df4.format(12.34));
    19 
    20         System.out.println("------------分组输出------------------");
    21         DecimalFormat df5 = new DecimalFormat("###,###.0000");
    22         System.out.println(df5.format(111111123456.12));
    23 
    24         DecimalFormat df6 = new DecimalFormat("##,###.000");
    25         System.out.println(df6.format(111111123456.12));
    26 
    27         DecimalFormat df7 = new DecimalFormat("##,###.000");
    28         System.out.println(df6.format(11112345.1237));
    29 
    30         
    31         System.out.println("---------------科学计数法---------------");
    32 
    33         DecimalFormat df8 = new DecimalFormat("0.000E0000");
    34         System.out.println(df8.format(10000));
    35         System.out.println(df8.format(12345678.345));
    36 
    37         System.out.println("---------------百分数的输出---------------");
    38         DecimalFormat df9 = new DecimalFormat("0000.0000%");
    39         System.out.println(df9.format(0.34567));
    40         System.out.println(df9.format(1.34567));
    41         
    42         DecimalFormat df10= new DecimalFormat("#.####%");
    43         System.out.println(df10.format(0.78645));
    44         System.out.println(df10.format(1.34567));
    45         
    46 
    47         System.out.println("-----------添加前、后修饰字符串,记得要用单引号括起来-----------");
    48         DecimalFormat df11= new DecimalFormat(" '这是我的钱有',###.###'$' ");
    49         System.out.println(df11.format(33333443.3333));
    50         
    51         
    52         
    53         System.out.println("-----------添加货币表示符号-----------");
    54         DecimalFormat df12= new DecimalFormat();
    55         df12.applyPattern("###,###.##¥");
    56         System.out.println(df12.format(34));
    57         
    58         
    59         System.out.println("-----------定义正负数模板,记得要用分号隔开-----------");
    60         DecimalFormat df13= new DecimalFormat("00.000;-#.0");
    61         System.out.println(df13.format(345.567));
    62         System.out.println(df13.format(-345.567));
    63         
    64             
    65         
    66     }
    67 
    68 }

    运行结果,如下:

  • 相关阅读:
    iphone那些事儿
    【转】我面试过最出色的项目主管,入职半年就离职了。
    net::ERR_ABORTED 404 (Not Found)
    四大名著
    测试心理状态
    typescript那些事儿
    flexbox父盒子flex-direction属性
    flexbox父盒子align-content属性
    flexbox父盒子flex-wrap属性
    flexbox父盒子align-items属性
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5726090.html
Copyright © 2020-2023  润新知