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 }

运行结果,如下:

posted on 2016-08-01 15:43  鸿钧老祖  阅读(447)  评论(0编辑  收藏  举报

导航