一.官方API文档publicabstractclassnumberformatextendsformatnumberformat在抽象类中从format继承
numberformatistheabstractbaseclassforallnumberformats.thisclassprovidestheinterfaceformattingandparsingnumbers.number fors gwhichlocaleshavenumberformats,and what their names are。
NumberFormat是抽象的数字格式类。 此类提供了用于设置和解析数字格式的接口,NumberFormat提供了一种确定哪些语言环境具有数字格式以及其名称的方法。
numberformathelpsyoutoformatandparsenumbersforanylocale.yourcodecanbecompletelyindependentofthelocaleconventionsfordecimalpon oreventheparticulardecimaldigitsused,orwhetherthenumberformatisevendecimal。
无论数字格式是否为偶数,NumberFormat都可以帮助您创建完全独立于小数点、千位分隔符以及所使用的特定小数位数的区域设置表达式的代码,以分析任何语言的数字。
二. Number的实例numberformatformat=number format.getinstance (;
三.测试代码
公共类测试框架{
publicstaticvoidmain (字符串[ ] args ) {
testNumberFormatGetInstance (;
system.out.print ln-------- testnumberformatdigits-----testnumberformatdigits;
testNumberFormatDigits (
system.out.println-------- testnumberformatsetroundingmode------ testnumberformatsetroundingmode;
testnumberformatsetroundingmode (;
system.out.print ln-------------- testnumberformatparse--------------;
testNumberFormatParse (;
}
privatestaticvoidtestnumberformatgetinstance (
double d=23323.3323232323;
system.out.println (number format.getinstance ().format(d ) ); //23,323.332。 返回当前默认区域设置的“默认值”格式
system.out.println (number format (d.getcurrencyinstance ().format ) d ); //23,323.33。 返回当前默认区域设置的货币格式
system.out.println (number format (d.getnumber instance ().format ) ) d ); //23,323.332。 返回当前默认区域设置的“通用数字”格式
system.out.println (number format (d.getintegerinstance ().format ) d ); //23,323。 返回当前默认区域设置的整数格式
system.out.println (number format (d.getpercentinstance ().format ) ) d ); //2,332,333 % 返回当前默认区域设置的【百分比】格式
}
privatestaticvoidtestnumberformatdigits (
numberformatformat=number format.getinstance (;
format.setparseintegeronly (true; //设定数是否应该只作为整数进行分析? 此方法只影响分析,与格式无关
format.setminimumfractiondigits (2); //设定数值的【小数部分】并允许
的最小位数。这几个方法只影响格式化,与解析无关format.setMaximumFractionDigits(3);//设置数值的【小数部分】允许的最大位数
format.setMinimumIntegerDigits(1);//设置数值的【整数部分】允许的最小位数
format.setMaximumIntegerDigits(5);//设置数值的【整数部分】允许的最大位数
System.out.println(format.format(123.1234));//123.123
System.out.println(format.format(123.1000));//123.10
System.out.println(format.format(123456789.12345));//56,789.123
}
private static void testNumberFormatSetRoundingMode() {
NumberFormat format = NumberFormat.getInstance();
format.setMaximumFractionDigits(0);//设置数值的【小数部分】允许的最大位数
System.out.println("默认模式为:" + format.getRoundingMode().name());//HALF_EVEN
System.out.println(format.format(5.6));//6。5以上不管是奇数还是偶数,5都舍入
System.out.println(format.format(5.4));//5。5以下不管是奇数还是偶数,5都舍去
System.out.println(format.format(1.5));//2。当是5时,若前一位是奇数,5就舍入
System.out.println(format.format(2.5));//2。当是5时,若前一位是偶数,5就舍去
format.setRoundingMode(RoundingMode.HALF_UP);//四舍五入。此方法只影响格式化,与解析无关
System.out.println("当前模式为:" + format.getRoundingMode().name());//HALF_UP
System.out.println(format.format(5.6));//6
System.out.println(format.format(5.4));//5
System.out.println(format.format(1.5));//2
System.out.println(format.format(2.5));//3
}
private static void testNumberFormatParse() {
NumberFormat format = NumberFormat.getInstance();
format.setParseIntegerOnly(false);//设置数是否应该仅作为整数进行解析。此方法只影响解析,与格式化无关
format.setMinimumFractionDigits(2);//这几个方法只影响格式化,与解析无关
ParsePosition position = new ParsePosition(2);
try {
Number number = format.parse("00123.10050100结尾处不受影响");//如果无法解析字符串的【开头】则抛出ParseException
Number number2 = format.parse("开头00123.10050100结尾处不受影响", position);//解析字符串时,从position.getIndex()处开始解析
System.out.println(number.floatValue());//123.1005
System.out.println(number.intValue());//123
System.out.println(number2.doubleValue());//123.100501
System.out.println(position.getIndex());//16。解析前,代表解析开始处字符的索引;解析后,代表被解析的最后一个字符后的字符的索引
System.out.println(position.getErrorIndex());//-1。获取出错时的索引,如果没有设置错误索引,则为 -1
position.setIndex(1);//如果重用ParsePosition,须重新设置一下Index才可以
System.out.println(format.parse("12.345678只解析", position).floatValue());//2.345678
} catch (ParseException e) {
e.printStackTrace();
}
}
}
测试参考:https://www.cnblogs.com/baiqiantao/p/6738842.html
public static void main(String[] args) throws Exception {
NumberFormat format = new DecimalFormat("###0000");
String format2 = format.format(123);//0123 在数字累加的时候可以保存数字前面的0 ,方便在一些文件序号等的处理
}