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 }
运行结果,如下: