NumberFormat DecimalFormat
http://blog.csdn.net/evangel_z/article/details/7624503
http://blog.163.com/wangzhengquan85@126/blog/static/36082995201182111847325/
http://niuxiaoxia870563296.iteye.com/blog/1749966
To format a number for the current Locale, use one of the factory class methods:
myString = NumberFormat.getInstance().format(myNumber);
If you are formatting multiple numbers, it is more efficient to get the format and use it multiple times so that the system doesn't have to fetch the information about the local language and country conventions multiple times.
NumberFormat nf = NumberFormat.getInstance();
for (int i = 0; i < myNumber.length; ++i) {
output.println(nf.format(myNumber[i]) + "; ");
}
To format a number for a different Locale, specify it in the call to getInstance.
NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
You can also use a NumberFormat to parse numbers:
myNumber = nf.parse(myString);
Use getInstance or getNumberInstance to get the normal number format. Use getIntegerInstance to get an integer number format. Use getCurrencyInstance to get the currency number format. And use getPercentInstance to get a format for displaying percentages. With this format, a fraction like 0.53 is displayed as 53%.
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。
DecimalFormat 包含一个模式 和一组符号。可直接使用 applyPattern() 或间接使用 API 方法来设置模式
| 符号 | 位置 | 本地化? | 含义 |
0 |
数字 | 是 | 阿拉伯数字 |
# |
数字字 | 是 | 阿拉伯数字,如果不存在则显示为空 |
. |
数字 | 是 | 小数分隔符或货币小数分隔符 |
- |
数字 | 是 | 减号 |
, |
数字 | 是 | 分组分隔符 |
E |
数字 | 是 | 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。 |
; |
子模式边界 | 是 | 分隔正数和负数子模式 |
% |
前缀或后缀 | 是 | 乘以 100 并显示为百分数 |
/u2030 |
前缀或后缀 | 是 | 乘以 1000 并显示为千分数 |
¤(/u00A4) |
前缀或后缀 | 否 | 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。 |
' |
前缀或后缀 | 否 | 用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号:"# o''clock"。 |
package com.java.numberformat; import java.text.DecimalFormat;
import java.util.Locale; public class DecimalFormatTest {
public static void main(String[] args) {
test1();
test2();
test3();
} public static void test1(){
System.out.println("---------- new DecimalFormat(String format) -----------");
DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
System.out.println("12.34 ----> 0.0 ----> " + df1.format(12.34));
System.out.println("12.34 ----> #.# ----> " + df2.format(12.34));
System.out.println("12.34 ----> 000.000 ----> " + df3.format(12.34));
System.out.println("12.34 ----> ###.### ----> " + df4.format(12.34));
} public static void test2(){
System.out.println("---------- DecimalFormat applyPattern -----------");
DecimalFormat df = new DecimalFormat();
df.applyPattern("0.0");
System.out.println("12.34 ----> 0.0 ----> " + df.format(12.34));
df.applyPattern("#.#");
System.out.println("12.34 ----> #.# ----> " + df.format(12.34));
df.applyPattern("000.000");
System.out.println("12.34 ----> 000.000 ----> " + df.format(12.34));
df.applyPattern("###.###");
System.out.println("12.34 ----> ###.### ----> " + df.format(12.34));
} public static void test3() {
DecimalFormat format = new DecimalFormat("###,####.000");
System.out.println("111111123456.1227222 ---> ###,####.000 ---->" + format.format(111111123456.1227222)); Locale.setDefault(Locale.US);
DecimalFormat usFormat = new DecimalFormat("###,###.000");
System.out.println("111111123456.1227222 ---> ###,###.000 ---->" + usFormat.format(111111123456.1227222)); DecimalFormat addPattenFormat = new DecimalFormat();
addPattenFormat.applyPattern("##,###.000");
System.out.println("111111123456.1227 ---> ##,###.000 ---->" + addPattenFormat.format(111111123456.1227)); DecimalFormat zhiFormat = new DecimalFormat();
zhiFormat.applyPattern("0.000E0000");
System.out.println("10000 ---> 0.000E0000 ---->" + zhiFormat.format(10000));
System.out.println("12345678.3452 ---> 0.000E0000 ---->" + zhiFormat.format(12345678.345)); DecimalFormat percentFormat = new DecimalFormat();
percentFormat.applyPattern("#0.000%");
System.out.println("0.3052222 ---> #0.000% ---->" + percentFormat.format(0.3052222));
}
}
----- Console output -----
---------- new DecimalFormat(String format) -----------
12.34 ----> 0.0 ----> 12.3
12.34 ----> #.# ----> 12.3
12.34 ----> 000.000 ----> 012.340
12.34 ----> ###.### ----> 12.34
---------- DecimalFormat applyPattern -----------
12.34 ----> 0.0 ----> 12.3
12.34 ----> #.# ----> 12.3
12.34 ----> 000.000 ----> 012.340
12.34 ----> ###.### ----> 12.34
111111123456.1227222 ---> ###,####.000 ---->1111,1112,3456.123
111111123456.1227222 ---> ###,###.000 ---->111,111,123,456.123
111111123456.1227 ---> ##,###.000 ---->111,111,123,456.123
10000 ---> 0.000E0000 ---->1.000E0004
12345678.3452 ---> 0.000E0000 ---->1.235E0007
0.3052222 ---> #0.000% ---->30.522%
DecimalFormat是NumberFormat的一个子类,其实例被指定为特定的地区。因此,你可以使用NumberFormat.getInstance 指定一个地区,然后将结构强制转换为一个DecimalFormat对象。文档中提到这个技术可以在大多情况下适用,但是你需要用try/catch 块包围强制转换以防转换不能正常工作 (大概在非常不明显得情况下使用一个奇异的地区)。
下面是一个这样的例子:
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class DecimalFormat6 {
public static void main(String args[]) {
DecimalFormat df = null;
// 得到一个NumberFormat 对象并
// 强制转换为一个 DecimalFormat 对象
try {
df = (DecimalFormat)NumberFormat.getInstance(Locale.GERMAN);
} catch (ClassCastException e) {
System.err.println(e);
}
// 设置格式模式
df.applyPattern("####.00000");
// format a number
System.out.println(df.format(1234.56));
}
}
如果你不关心国际化,可以直接使用DecimalFormat 。
class Test {
public static void main(String[] args) {
new Test().test();
}
public void test() {
double d = 3.1415926;
double d1 = 100.2;
long l = 123456789;
String s = "987,3.1415926";
// NumberFormat nf = NumberFormat.getInstance();
// nf.setMaximumFractionDigits(2);
// nf.setMinimumFractionDigits(2);
// nf.setMinimumIntegerDigits(2);
// nf.setMaximumIntegerDigits(2);
// System.out.println(nf.format(d));//03.14
// System.out.println(nf.format(d1));//00.12
DecimalFormat df = new DecimalFormat();
// 0占位符:显示pattern规定的位数,没有用0补齐
// df.applyPattern("0.00");//3.14 100.20
// df.applyPattern("000.0000");//003.1416 100.2000
// df.applyPattern("000");//003 100
// #占位符:显示pattern规定的位数,没有无需补充
// df.applyPattern("##.###");//3.142 100.2
// df.applyPattern("#");//3 100
// 以百分数形式显示
// df.applyPattern("#.00%");//314.16% 10020.00
// df.applyPattern("#.#%");//314.2% 10020%
// 以千分数显示,并取三位小数,不够用0补齐
// df.applyPattern("#.000\u2030");//3141.593‰ 100200.000‰
// 添加分组分隔符 、负号
// df.applyPattern("-,###.##");//123,456,789
// 嵌入文本
// df.applyPattern("看看-,###.##ok");//看看-123,456,789ok 看看-100.2ok
// 解析文本成Number
Number n = null;
try {
n = df.parse(s);// 9873.1415926
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(String.valueOf(n));
System.out.println(df.format(d1));
}
/**
* NumberFormat:public abstract class NumberFormat,是所有数值格式的抽象基类。
* 抽象类,获取实例:NumberFormat nf = NumberFormat.getInstance();
* 格式化数值:nf.format(number); 解析数值文本:nf.parse(strNumber);
* 主要作用体现在国际化格式规范定义,以及获取简单数值格式,具体格式约束通过其子类:DecimalFormat实现
*/
public void testNumberFormat() {
double d = 3.1415926;
int i = 123456;
String s = "3.1415926";
// NumberFormat
NumberFormat nf = NumberFormat.getNumberInstance();// NumberFormat.getInstance()等效
// 添加地区国际化语言
nf.getInstance(Locale.CHINA);// getInstance(Locale.CHINA);
Locale.setDefault(Locale.CHINA);// 设置JVM虚拟机默认语言格式
// 获得整数格式
nf.getIntegerInstance();
// 获得百分数格式
nf.getPercentInstance();
// 获得货币格式
nf.getCurrencyInstance();
// 解析给定字符串开头的文本,生成一个数值
try {
nf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
// 设置此格式中是否使用分组
nf.setGroupingUsed(true);
// 设置数的小数部分所允许的最大位数、最小位数,系统默认为三位小数
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
// 设置正数部分所允许的最大位数、最小位数
nf.setMaximumIntegerDigits(2);
nf.setMinimumIntegerDigits(2);
// 使用上面定义的nf,格式规范数字d
String sd = nf.format(d);
}
/**
* DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字
* 要获取具体语言环境的 NumberFormat(包括默认语言环境),可调用 NumberFormat 的某个工厂方法,如 getInstance()。
* 通常不直接调用 DecimalFormat 的构造方法,因为 NumberFormat 的工厂方法可能返回不同于 DecimalFormat 的子类。
*/
public void testDecimalFormat() {
String pattern = "";
// 使用默认模式和默认语言环境的符号创建一个 DecimalFormat
DecimalFormat df = new DecimalFormat();
// 使用给定的模式和默认语言环境的符号创建一个 DecimalFormat
DecimalFormat df1 = new DecimalFormat(pattern);
// 通过继承获取
DecimalFormat df2 = null;
try {
df2 = (DecimalFormat) NumberFormat.getInstance();
} catch (ClassCastException e) {
System.out.println(e);
}
// 为格式化对象添加格式模式
df.applyPattern(pattern);
// 使用分组,默认为true,并设置分组大小
df.setGroupingUsed(true);
df.setGroupingSize(3);
// 设置正数前、后缀
df.setNegativePrefix("+");
df.setNegativeSuffix("%");
// 设置负数前、后缀
df.setPositivePrefix("-");
df.setPositiveSuffix("%");
// 使用方法控制小数位数、整数位数、货币格式
df.setMaximumFractionDigits(2);
df.setMinimumIntegerDigits(2);
df.setCurrency(Currency.getInstance(Locale.CHINA));
// 允许设置整数中小数分隔符的行为。(有小数时始终显示小数分隔符。true时,无小数也显示小数分隔符)
df.setDecimalSeparatorAlwaysShown(false);
// 设置小数的舍入模式,默认模式为RoundingMode.HALF_EVEN
df.setRoundingMode(RoundingMode.HALF_EVEN);
/*
* pattern的形式举例: 1、
*/
}
NumberFormat DecimalFormat的更多相关文章
- 数值格式化 NumberFormat DecimalFormat RoundingMode
NumberFormat [简介] java.text.NumberFormat extends java.text.Format extends java.lang.Object 实现的接口:Ser ...
- Java数字、货币值和百分数等的格式化处理
如果我们用下列语句输出一个数 System.out.println(123456.789); 将会在Console看到输出 123456.789 那么如何得到123,456.789这种格式化的输出呢? ...
- Java Numeric Formatting--reference
I can think of numerous times when I have seen others write unnecessary Java code and I have written ...
- 第三周java学习总结
学号 20175206 <Java程序设计>第三周学习总结 教材学习内容总结 本周为第四章的学习,分为以下几个方面: 1.包与代码组织 2.String类 3.对象创建 4.包装类 经过代 ...
- [java初探10]__关于数字处理类
前言 在我们的日常开发过程中,我们会经常性的使用到数字类型的数据,同时,也会有众多的对数字处理的需求,针对这个方面的问题,在JAVA语言中.提供解决方法的类就是数字处理类 java中的数字处理类包括: ...
- Lifyray笑傲江湖之API总结TextUtil
package liferay; /** * */ import java.text.DecimalFormat; import java.text.NumberFormat; import java ...
- Jakarta Commons Cookbook
Cookbook就是工具书,应该是前年看的,在中关村看的影印版,全英文,本书主要讲解了一下模块: Core:BeanUtils,Lang,Collections,logging Db:DbUtil ...
- Java—NumberFormat与DecimalFormat类
1.NumberFormat表示数字的格式化类 NumberFormat表示数字的格式化类,即:可以按照本地的风格习惯进行数字的显示. No. 方法 类型 描述 1 public static Loc ...
- 数值格式化 NumberFormat、 DecimalFormat、 RoundingMode
NumberFormat [简介] java.text.NumberFormat extends java.text.Format extends java.lang.Object 实现的接口:Ser ...
随机推荐
- FileZillaFTP使用教程
FileZillaServer.exe服务启动和关闭程序 FileZilla Server Interface.exe 服务 管理程序 配置ftp服务器的用户名,密码,目录,目录读写权限 启动File ...
- 百度地图用ip获取当前位置的经纬度(高精度)
步骤比较简单先上百度地图API官网,申请一个应用AK(访问凭据):查看一下高进度定位的API,看看是否都符合要求下面直接上代码 /** * 根据ip获取地理坐标 * @param ip * @retu ...
- jQuery视差滚动插件,(附原理分析,调用方法)
演示地址:http://www.jq22.com/jquery-info1799 jquery插件,使用验证过可用. 分析源代码后总结原理:设置background样式为fixed,判断浏览器滚动距离 ...
- POI导出excel日期格式
参考帖子: [1]http://www.ithao123.cn/content-2028409.html [2]http://javacrazyer.iteye.com/blog/894850 再读本 ...
- Python之Web前端Dom, jQuery
Python之Web前端: Dom jQuery ###Dom 一. 什么是Dom? 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它 ...
- 数据库Blob数据类型转String
blob数据是存储大对象数据类型, 一般存放二进制的,所以才用字节存取. 首先判断blob数据是否为空,然后采用输入流读出数据,具体代码如下: String content = null; try { ...
- 将speedbutton放在toolbar上,flat设为true,并将speedbutton的width和height设得比较大,在speedbutton中间会出现一条竖线,如何消去?
把toolbar的flat设为false就没有竖线了
- MySQL存储引擎之Myisam和Innodb总结性梳理
Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...
- 关于Qt creator 无法使用fcitx输入中文的问题折腾
环境: 系统ubuntu16.04amd64,qt5.4.2 安装完qt5.4后,在编写代码时,发现无法输入中文,离开qt creator 就立刻正常.原因似乎是qt对fcitx支持. 解决方法我是参 ...
- 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】
一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...