一、JavaAPI官方描述

1、NumberFormat

NumberFormat帮助您格式化和解析任何区域设置的数字。您的代码可以完全独立于小数点,千位分隔符的区域设置约定,甚至是使用的特定十进制数字,或者数字格式是否为十进制。

2、 DecimalFormat

DecimalFormat是NumberFormat十进制数字格式的具体子类 。它具有多种功能,旨在解析和格式化任何语言环境中的数字,包括支持西方,阿拉伯语和印度语数字。它还支持不同类型的数字,包括整数(123),定点数(123.4),科学记数法(1.23E4),百分比(12%)和货币金额(123美元)。所有这些都可以本地化。

二、NumberFormat详解

1、获取NumberFormat实例

//创建 一个整数格式 地区用系统默认的NumberFormat integerNumber = NumberFormat.getIntegerInstance(Locale.getDefault());
  1. 使用getInstance或getNumberInstance获取正常的数字格式。
  2. 使用getIntegerInstance得到的整数格式。
  3. 使用getCurrencyInstance来获取货币数字格式。
  4. 使用getPercentInstance获取显示百分比的格式。

2、常用方法

3、NumberFormat类的使用

要使用NumberFormat类,首先需要使用NumberFormat类的静态方法getNumberInstance()来获取一个NumberFormat实例,然后可以使用实例的format()方法将数字转换为字符串形式,也可以使用实例的parse()方法将字符串转换为数字形式。

4.NumberFormat类使用示例

// 1.创建一个实例NumberFormat numberFormat = NumberFormat.getNumberInstance();// 2.设置小数点后的位数numberFormat.setMaximumFractionDigits(2);// 3.设置是否使用千分位分隔符numberFormat.setGroupingUsed(false);// 4.将数字123456.789格式化为字符串“123456.79”String result1 = numberFormat.format(123456.789);System.out.println(result1); //输出结果:123456.79

三、DecimalFormat详解

1、获取NumberFormat实例

要获取特定地区(包括默认地区)的NumberFormat,请调用NumberFormat的工厂方法之一,例如getInstance()。通常,不要直接调用DecimalFormat构造函数,因为NumberFormat工厂方法可能返回DecimalFormat之外的子类。如果需要自定义format对象,可以这样做:

try {NumberFormat f = NumberFormat.getInstance(Locale.getDefault());if (f instanceof DecimalFormat) {((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);//写具体的代码}} catch (Exception e) {e.printStackTrace();}

设置Pattern

DecimalFormat作为NumberFormat的具体实现子类,最大的特点就是 可以使用Pattern。来实现最大程度的对数据格式进行定制。
一个Pattern中的许多字符是按字面意思理解的;它们在解析期间匹配,在格式化期间输出不变,就是字符在Pattern中 不影响最后的数字格式化另一方面,特殊字符代表其他字符、字符串或字符类。如果要以文字形式出现在前缀或后缀中,必须引用它们(除非另有说明)。

2、子类特有的方法

3、代码示例

//创建一个默认的通用格式NumberFormat numberFormat = NumberFormat.getInstance();DecimalFormat numberDecimalFormat;//捕捉异常,以防强制类型转换出错try {//强制转换成DecimalFormatnumberDecimalFormat = (DecimalFormat) numberFormat;//保留小数点后面三位,不足的补零,前面整数部分 每隔四位 ,用 “,” 符合隔开numberDecimalFormat.applyPattern("#,####.000");//设置舍入模式 为DOWN,否则默认的是HALF_EVENnumberDecimalFormat.setRoundingMode(RoundingMode.DOWN);//设置 要格式化的数 是正数的时候。前面加前缀numberDecimalFormat.setPositivePrefix("Prefix");System.out.println("正数前缀"+numberDecimalFormat.format(123456.7891));//设置 要格式化的数 是正数的时候。后面加后缀numberDecimalFormat.setPositiveSuffix("Suffix");System.out.println("正数后缀"+numberDecimalFormat.format(123456.7891));//设置整数部分的最大位数numberDecimalFormat.setMaximumIntegerDigits(3);System.out.println("整数最大位数 "+numberDecimalFormat.format(123456.7891));//设置整数部分最小位数numberDecimalFormat.setMinimumIntegerDigits(10);System.out.println("整数最小位数 "+numberDecimalFormat.format(123456.7891));//设置小数部分的最大位数numberDecimalFormat.setMaximumFractionDigits(2);System.out.println("小数部分最大位数 "+numberDecimalFormat.format(123.4));//设置小数部分的最小位数numberDecimalFormat.setMinimumFractionDigits(6);System.out.println("小数部分最小位数 "+numberDecimalFormat.format(123.4));}catch (Exception e){e.printStackTrace();}

四、DecimalFormat类符号含义

DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。上面的例子包含了差不多所有的基本用法,如果你想了解更多,请参考 DecimalFormat 类的文档。

符号含义:

0 一个数字

‘#’ 一个数字,不包括 0

. 小数的分隔符的占位符

, 分组分隔符的占位符

; 分隔格式。

  • 缺省负数前缀。

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

” />DecimalFormat df1 = new DecimalFormat(“0.0”); DecimalFormat df2 = new DecimalFormat(“#.#”); DecimalFormat df3 = new DecimalFormat(“000.000”); DecimalFormat df4 = new DecimalFormat(“###.###”); System.out.println(df1.format(12.34)); //12.3System.out.println(df2.format(12.34)); //12.3System.out.println(df3.format(12.34)); //012.340System.out.println(df4.format(12.34)); //12.34

import java.text.DecimalFormat;public class Test{public static void main(String[] args){double pi=3.1415927;//圆周率//取一位整数 System.out.println(new DecimalFormat("0").format(pi));//3//取一位整数和两位小数System.out.println(new DecimalFormat("0.00").format(pi));//3.14//取两位整数和三位小数,整数不足部分以0填补。System.out.println(new DecimalFormat("00.000").format(pi));//03.142//取所有整数部分System.out.println(new DecimalFormat("#").format(pi));//3//以百分比方式计数,并取两位小数System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%long c=299792458;//光速//显示为科学计数法,并取五位小数System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8//显示为两位整数的科学计数法,并取四位小数System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7//每三位以逗号进行分隔。System.out.println(new DecimalFormat(",###").format(c));//299,792,458//将格式嵌入文本System.out.println(new DecimalFormat("光速大小为每秒,###米").format(c)); //光速大小为每秒299,792,458米}}