java数值处理:NumberFormat,DecimalFormat

import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Currency;
import java.util.Locale;
import java.util.ResourceBundle;


public 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);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值