数值格式化 NumberFormat DecimalFormat RoundingMode
NumberFormat
java.text.NumberFormat extends java.text.Format extends java.lang.Object
实现的接口:Serializable, Cloneable
直接子类:ChoiceFormat, DecimalFormat
java.text.NumberFormat extends java.text.Format extends java.lang.Object
实现的接口:Serializable, Cloneable
直接子类:ChoiceFormat, DecimalFormat
myString = NumberFormat.getInstance().format(myNumber);
myString = NumberFormat.getInstance().format(myNumber);
NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
myNumber = nf.parse(myString);
myNumber = nf.parse(myString);
- Object clone() 重写 Cloneable
- boolean equals(Object obj) 重写 equals
- int hashCode() 重写 hashCode
- String format(double number) 格式规范。
- abstract StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) 格式规范。
- String format(long number) 格式规范。
- abstract StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) 格式规范。
- StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) 格式化一个数并将所得文本添加到给定字符串缓冲区。
- Number parse(String source) 解析给定字符串开头的文本,生成一个数值。
- abstract Number parse(String source, ParsePosition parsePosition) 如果可能则返回 Long (例如,在 [Long.MIN_VALUE, Long.MAX_VALUE] 范围内且没有小数),否则返回 Double。
- Object parseObject(String source, ParsePosition pos) 解析字符串中的文本,以生成一个 Number。
- int getMaximumFractionDigits() 返回数的小数部分所允许的最大位数。
- int getMaximumIntegerDigits() 返回数的整数部分所允许的最大位数。
- int getMinimumFractionDigits() 返回数的小数部分所允许的最小位数。
- int getMinimumIntegerDigits() 返回数的整数部分所允许的最小位数。
- void setMaximumFractionDigits(int newValue) 设置数的小数部分所允许的最大位数。
- void setMaximumIntegerDigits(int newValue) 设置数的整数部分所允许的最大位数。
- void setMinimumFractionDigits(int newValue) 设置数的小数部分所允许的最小位数。
- void setMinimumIntegerDigits(int newValue) 设置数的整数部分所允许的最小位数。
- static Locale[] getAvailableLocales() 返回一个数组,它包含所有此类的 get*Instance 方法可以为其返回本地化实例的语言环境。
- static NumberFormat getCurrencyInstance() 返回当前默认语言环境的【货币】格式。
- static NumberFormat getCurrencyInstance(Locale inLocale) 返回指定语言环境的【货币】格式。
- static NumberFormat getInstance() 返回当前默认语言环境的通用【数值】格式。
- static NumberFormat getInstance(Locale inLocale) 返回指定语言环境的通用【数值】格式。
- static NumberFormat getIntegerInstance() 返回当前默认语言环境的【整数】格式。
- static NumberFormat getIntegerInstance(Locale inLocale) 返回指定语言环境的【整数】格式。
- static NumberFormat getNumberInstance() 返回当前默认语言环境的【通用数值】格式。
- static NumberFormat getNumberInstance(Locale inLocale) 返回指定语言环境的【通用数值】格式。
- static NumberFormat getPercentInstance() 返回当前默认语言环境的【百分比】格式。
- static NumberFormat getPercentInstance(Locale inLocale) 返回指定语言环境的【百分比】格式。
- Currency getCurrency() 获取格式化货币值时此数值格式使用的货币。
- RoundingMode getRoundingMode() 获取在此 NumberFormat 中使用的 RoundingMode。
- boolean isGroupingUsed() 如果此格式中使用了分组,则返回 true。
- boolean isParseIntegerOnly() 如果此格式只将数作为整数解析,则返回 true。
- void setCurrency(Currency currency) 设置格式化货币值时此数值格式使用的货币。
- void setRoundingMode(RoundingMode roundingMode) 设置在此 NumberFormat 中使用的 RoundingMode。
- void setGroupingUsed(boolean newValue) 设置此格式中是否使用分组。
- void setParseIntegerOnly(boolean value) 设置数是否应该仅作为整数进行解析。
public class Test {
public static void main(String[] args) {
testGetInstance();
System.out.println("----------testSetDigits------------");
testSetDigits();
System.out.println("-----------testRoundingMode-----------");
testRoundingMode();
System.out.println("-----------testParse-----------");
testParse();
}
private static void testGetInstance() {
double d = 23323.3323232323;
System.out.println(NumberFormat.getInstance().format(d));//23,323.332。返回当前缺省语言环境的【缺省数值】格式
System.out.println(NumberFormat.getCurrencyInstance().format(d));//¥23,323.33。返回当前缺省语言环境的【货币】格式
System.out.println(NumberFormat.getNumberInstance().format(d));//23,323.332。返回当前缺省语言环境的【通用数值】格式
System.out.println(NumberFormat.getIntegerInstance().format(d));//23,323。返回当前缺省语言环境的【整数】格式
System.out.println(NumberFormat.getPercentInstance().format(d));//2,332,333%。返回当前缺省语言环境的【百分比】格式
}
private static void testSetDigits() {
NumberFormat format = NumberFormat.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 testRoundingMode() {
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 testParse() {
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();
}
}
}
public class Test {
public static void main(String[] args) {
testGetInstance();
System.out.println("----------testSetDigits------------");
testSetDigits();
System.out.println("-----------testRoundingMode-----------");
testRoundingMode();
System.out.println("-----------testParse-----------");
testParse();
}
private static void testGetInstance() {
double d = 23323.3323232323;
System.out.println(NumberFormat.getInstance().format(d));//23,323.332。返回当前缺省语言环境的【缺省数值】格式
System.out.println(NumberFormat.getCurrencyInstance().format(d));//¥23,323.33。返回当前缺省语言环境的【货币】格式
System.out.println(NumberFormat.getNumberInstance().format(d));//23,323.332。返回当前缺省语言环境的【通用数值】格式
System.out.println(NumberFormat.getIntegerInstance().format(d));//23,323。返回当前缺省语言环境的【整数】格式
System.out.println(NumberFormat.getPercentInstance().format(d));//2,332,333%。返回当前缺省语言环境的【百分比】格式
}
private static void testSetDigits() {
NumberFormat format = NumberFormat.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 testRoundingMode() {
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 testParse() {
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();
}
}
}
DecimalFormat 重要
java.text.DecimalFormat extends java.text.NumberFormat extends java.text.Format extends java.lang.Object
实现的接口:Serializable, Cloneable
直接子类:ChoiceFormat, DecimalFormat
java.text.DecimalFormat extends java.text.NumberFormat extends java.text.Format extends java.lang.Object
实现的接口:Serializable, Cloneable
直接子类:ChoiceFormat, DecimalFormat
System.out.println(NumberFormat.getInstance() instanceof DecimalFormat);//true
System.out.println(NumberFormat.getInstance() instanceof DecimalFormat);//true
NumberFormat f = NumberFormat.getInstance(loc);
if (f instanceof DecimalFormat) ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
NumberFormat f = NumberFormat.getInstance(loc);
if (f instanceof DecimalFormat) ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
符号 位置 本地化 含义 0
数字 是 阿拉伯数字 #
数字 是 阿拉伯数字,如果不存在则显示为 0 .
数字 是 小数分隔符或货币小数分隔符 -
数字 是 减号 ,
数字 是 分组分隔符 E
数字 是 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。 ;
子模式边界 是 分隔正数和负数子模式 %
前缀或后缀 是 乘以 100 并显示为百分数 \u2030
前缀或后缀 是 乘以 1000 并显示为千分数 ¤
(\u00A4
)前缀或后缀 否 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。 '
前缀或后缀 否 用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#"
将 123 格式化为"#123"
。要创建单引号本身,请连续使用两个单引号:"# o''clock"
。
- 0 一个数字(如果位数不足则以 0 填充)
- # 一个数字,不包括 0(只要有可能就把数字拉上这个位置)
- . 小数的分隔符的占位符
- , 分组分隔符的占位符
- ; 分隔格式。
- - 缺省负数前缀。
- % 乘以 100 和作为百分比显示
- ? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代 替十进制分隔符。
- X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
- 构造方法 DecimalFormat() 使用默认模式和默认语言环境的符号创建一个 DecimalFormat
- 构造方法 DecimalFormat(String pattern) 使用给定的模式和默认语言环境的符号创建一个 DecimalFormat
- 构造方法 DecimalFormat(String pattern, DecimalFormatSymbols symbols) 使用给定的模式和符号创建一个 DecimalFormat
- void applyLocalizedPattern(String pattern) 将给定的模式应用于此 Format 对象。
- void applyPattern(String pattern) 将给定的模式应用于此 Format 对象。
- StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) 格式化一个 double 值,以生成一个字符串。
- StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition) 格式化一个 long 值,以生成一个字符串。
- StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) 格式化一个数,并将所得文本追加到给定的字符串缓冲区。
- AttributedCharacterIterator formatToCharacterIterator(Object obj) 格式化一个 Object,以生成一个 AttributedCharacterIterator。
- DecimalFormatSymbols getDecimalFormatSymbols() 返回小数格式符号的一个副本,通常程序员或用户不改变此副本。
- void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols) 设置小数格式符号,通常程序员或用户不改变此符号。
- Currency getCurrency() 获取格式化货币值时,此十进制格式使用的货币。
- void setCurrency(Currency currency) 设置格式化货币值时,此数字格式使用的货币。
- int getMultiplier() 获取百分数、千分数和类似格式中使用的乘数。对于百分数格式,将该乘数设置为 100 并将后缀设置为 '%'。对于千分数格式,将该乘数设置为 1000 并将后缀设置为 '\u2030'。
- void setMultiplier(int newValue) 设置百分数、千分数和类似格式中使用的乘数。
- int getGroupingSize() 返回分组大小。
- void setGroupingSize(int newValue) 设置分组大小。
- RoundingMode getRoundingMode() 获取在此 DecimalFormat 中使用的 RoundingMode。
- void setRoundingMode(RoundingMode roundingMode) 设置在此 DecimalFormat 中使用的 RoundingMode。
- boolean isDecimalSeparatorAlwaysShown() 允许获取整数中小数分隔符的行为。
- void setDecimalSeparatorAlwaysShown(boolean newValue) 允许设置整数中小数分隔符的行为。
- boolean isParseBigDecimal() 返回 parse(java.lang.String, java.text.ParsePosition) 方法是否返回 BigDecimal。
- void setParseBigDecimal(boolean newValue) 设置 parse(java.lang.String, java.text.ParsePosition) 方法是否返回 BigDecimal。
- int getMaximumFractionDigits() 获取某个数的小数部分中所允许的最大数字位数。
- int getMaximumIntegerDigits() 获取某个数的整数部分中所允许的最大数字位数。
- int getMinimumFractionDigits() 获取某个数的小数部分中所允许的最小数字位数。
- int getMinimumIntegerDigits() 获取某个数的整数部分中所允许的最小数字位数。
- void setMaximumFractionDigits(int newValue) 设置某个数的小数部分中所允许的最大数字位数。
- void setMaximumIntegerDigits(int newValue) 设置某个数字的整数部分中所允许的最大数字位数。
- void setMinimumFractionDigits(int newValue) 设置某个数的小数部分中所允许的最小数字位数。
- void setMinimumIntegerDigits(int newValue) 设置某个数字的整数部分中所允许的最小数字位数。
- String getNegativePrefix() 获取负数前缀。
- String getNegativeSuffix() 获取负数后缀。
- String getPositivePrefix() 获取正数前缀。
- String getPositiveSuffix() 获取正数后缀。
- void setNegativePrefix(String newValue) 设置负数前缀。
- void setNegativeSuffix(String newValue) 设置负数后缀。
- void setPositivePrefix(String newValue) 设置正数前缀。
- void setPositiveSuffix(String newValue) 设置正数后缀。
- Number parse(String text, ParsePosition pos) 解析字符串中的文本,以生成一个 Number。
- String toLocalizedPattern() 合成一个表示此 Format 对象当前状态的、已本地化的模式字符串。
- String toPattern() 合成一个表示此 Format 对象当前状态的模式字符串。
public class Test {
public static void main(String[] args) {
testPatterns();
testPatterns2();
testDecimalFormat();
}
public static void testPatterns() {
//DecimalFormat中,占位符 0 表示如果位数不足则以 0 填充,占位符 # 表示只要有可能就把数字拉上这个位置
double pi = 3.1415927;
System.out.println("-------------------3.1415927------------------");
System.out.println(new DecimalFormat("0").format(pi)); //3
System.out.println(new DecimalFormat("0.00").format(pi));//3.14
System.out.println(new DecimalFormat("00.000").format(pi));//03.142
System.out.println(new DecimalFormat("0.00%").format(pi));//以百分比方式计数,314.16%
System.out.println(new DecimalFormat("#").format(pi)); //3
System.out.println(new DecimalFormat("#.##").format(pi)); //3.14
System.out.println(new DecimalFormat("##.###").format(pi)); //3.142
System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%
float f = 12.34f;
System.out.println("---------------------12.34----------------");
System.out.println(new DecimalFormat("0.0").format(f));//12.3
System.out.println(new DecimalFormat("#.#").format(f));//12.3
System.out.println(new DecimalFormat("000.000").format(f));//012.340
System.out.println(new DecimalFormat("###.###").format(f));//12.34
long l = 123456789L;
System.out.println("-------------------123456789------------------");
System.out.println(new DecimalFormat("#.##############E0").format(l));//1.23456789E8
System.out.println(new DecimalFormat("00.##E00").format(l));//12.35E07
System.out.println(new DecimalFormat(",###").format(l)); //每三位以逗号进行分隔。123,456,789
System.out.println(new DecimalFormat("值为,###米/秒").format(l));//【值为123,456,789米/秒】
}
private static void testPatterns2() {
double pi = 3.1415927;
long l = 1234567890123456789L;
int i = 10086;
float f = 0.01f;
System.out.println("--------------------#,##0.00-----------------");
String pattern = "#,##0.00";//强制保留两位小数,整数部分每三位以逗号分隔,整数部分至少一位
System.out.println(new DecimalFormat(pattern).format(pi));//3.14
System.out.println(new DecimalFormat(pattern).format(l));//1,234,567,890,123,456,789.00
System.out.println(new DecimalFormat(pattern).format(i));//10,086.00
System.out.println(new DecimalFormat(pattern).format(f));//0.01
System.out.println("--------------------NumberFormat-----------------");
NumberFormat format = NumberFormat.getNumberInstance();
format.setMinimumFractionDigits(2);
format.setMaximumFractionDigits(2);//设置这两个以后,效果和上面一样,否则和【#,##0.###】一样
System.out.println(format.format(pi));//3.14
System.out.println(format.format(l));//1,234,567,890,123,456,789.00
System.out.println(format.format(i));//10,086.00
System.out.println(format.format(f));//0.01
}
private static void testDecimalFormat() {
NumberFormat format = NumberFormat.getNumberInstance();
if (format instanceof DecimalFormat) {
DecimalFormat dFormat = (DecimalFormat) format;
System.out.println("--------------------DecimalFormat-----------------");
System.out.println(dFormat.getGroupingSize());//【3】分组大小
System.out.println(dFormat.getRoundingMode());//【HALF_EVEN】
System.out.println(dFormat.toPattern());//【#,##0.###】合成一个表示此 Format 对象当前状态的模式字符串
System.out.println(dFormat.toLocalizedPattern());//【#,##0.###】合成一个表示此 Format 对象当前状态的、已本地化的模式字符串
System.out.println("------------------位数-------------------");
System.out.println(dFormat.getMaximumFractionDigits());//【3】
System.out.println(dFormat.getMinimumFractionDigits());//【0】
System.out.println(dFormat.getMaximumIntegerDigits());//【2147483647】也就是int类型的最大值
System.out.println(dFormat.getMinimumFractionDigits());//【0】
System.out.println("---------------------杂项----------------");
System.out.println(dFormat.getCurrency());//【CNY】使用的货币符号,代码CNY(China Yuan)是ISO分配给中国的币种符号
System.out.println(dFormat.getMultiplier());//【1】获取百分数、千分数等格式中使用的乘数(对于百分数格式,为100)
System.out.println(dFormat.isDecimalSeparatorAlwaysShown());//【false】允许获取整数中小数分隔符的行为
System.out.println(dFormat.isParseBigDecimal());//【false】parse(String,ParsePosition) 方法是否返回 BigDecimal
}
}
}
public class Test {
public static void main(String[] args) {
testPatterns();
testPatterns2();
testDecimalFormat();
}
public static void testPatterns() {
//DecimalFormat中,占位符 0 表示如果位数不足则以 0 填充,占位符 # 表示只要有可能就把数字拉上这个位置
double pi = 3.1415927;
System.out.println("-------------------3.1415927------------------");
System.out.println(new DecimalFormat("0").format(pi)); //3
System.out.println(new DecimalFormat("0.00").format(pi));//3.14
System.out.println(new DecimalFormat("00.000").format(pi));//03.142
System.out.println(new DecimalFormat("0.00%").format(pi));//以百分比方式计数,314.16%
System.out.println(new DecimalFormat("#").format(pi)); //3
System.out.println(new DecimalFormat("#.##").format(pi)); //3.14
System.out.println(new DecimalFormat("##.###").format(pi)); //3.142
System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%
float f = 12.34f;
System.out.println("---------------------12.34----------------");
System.out.println(new DecimalFormat("0.0").format(f));//12.3
System.out.println(new DecimalFormat("#.#").format(f));//12.3
System.out.println(new DecimalFormat("000.000").format(f));//012.340
System.out.println(new DecimalFormat("###.###").format(f));//12.34
long l = 123456789L;
System.out.println("-------------------123456789------------------");
System.out.println(new DecimalFormat("#.##############E0").format(l));//1.23456789E8
System.out.println(new DecimalFormat("00.##E00").format(l));//12.35E07
System.out.println(new DecimalFormat(",###").format(l)); //每三位以逗号进行分隔。123,456,789
System.out.println(new DecimalFormat("值为,###米/秒").format(l));//【值为123,456,789米/秒】
}
private static void testPatterns2() {
double pi = 3.1415927;
long l = 1234567890123456789L;
int i = 10086;
float f = 0.01f;
System.out.println("--------------------#,##0.00-----------------");
String pattern = "#,##0.00";//强制保留两位小数,整数部分每三位以逗号分隔,整数部分至少一位
System.out.println(new DecimalFormat(pattern).format(pi));//3.14
System.out.println(new DecimalFormat(pattern).format(l));//1,234,567,890,123,456,789.00
System.out.println(new DecimalFormat(pattern).format(i));//10,086.00
System.out.println(new DecimalFormat(pattern).format(f));//0.01
System.out.println("--------------------NumberFormat-----------------");
NumberFormat format = NumberFormat.getNumberInstance();
format.setMinimumFractionDigits(2);
format.setMaximumFractionDigits(2);//设置这两个以后,效果和上面一样,否则和【#,##0.###】一样
System.out.println(format.format(pi));//3.14
System.out.println(format.format(l));//1,234,567,890,123,456,789.00
System.out.println(format.format(i));//10,086.00
System.out.println(format.format(f));//0.01
}
private static void testDecimalFormat() {
NumberFormat format = NumberFormat.getNumberInstance();
if (format instanceof DecimalFormat) {
DecimalFormat dFormat = (DecimalFormat) format;
System.out.println("--------------------DecimalFormat-----------------");
System.out.println(dFormat.getGroupingSize());//【3】分组大小
System.out.println(dFormat.getRoundingMode());//【HALF_EVEN】
System.out.println(dFormat.toPattern());//【#,##0.###】合成一个表示此 Format 对象当前状态的模式字符串
System.out.println(dFormat.toLocalizedPattern());//【#,##0.###】合成一个表示此 Format 对象当前状态的、已本地化的模式字符串
System.out.println("------------------位数-------------------");
System.out.println(dFormat.getMaximumFractionDigits());//【3】
System.out.println(dFormat.getMinimumFractionDigits());//【0】
System.out.println(dFormat.getMaximumIntegerDigits());//【2147483647】也就是int类型的最大值
System.out.println(dFormat.getMinimumFractionDigits());//【0】
System.out.println("---------------------杂项----------------");
System.out.println(dFormat.getCurrency());//【CNY】使用的货币符号,代码CNY(China Yuan)是ISO分配给中国的币种符号
System.out.println(dFormat.getMultiplier());//【1】获取百分数、千分数等格式中使用的乘数(对于百分数格式,为100)
System.out.println(dFormat.isDecimalSeparatorAlwaysShown());//【false】允许获取整数中小数分隔符的行为
System.out.println(dFormat.isParseBigDecimal());//【false】parse(String,ParsePosition) 方法是否返回 BigDecimal
}
}
}
ParsePosition 了解即可
- 构造方法 ParsePosition(int index) 创建一个具有给定初始索引的新 ParsePosition。
- int getErrorIndex() 获取出错时的索引,如果没有设置错误索引,则为 -1。
- void setErrorIndex(int ei) 设置解析出错时的索引。格式器应该在从它们的 parseObject 方法返回错误代码之前进行此设置。如果没有设置,则默认值为 -1。
- int getIndex() 获取当前的解析位置。对于解析方法的输入,这是解析开始处字符的索引;对于输出,这是被解析的最后一个字符后的字符索引。
- void setIndex(int index) 设置当前解析位置。
FieldPosition【没用过】
- 通过一个其名称通常以 _FIELD 结尾的整型常量。这些常量在 Format 的不同子类中定义。
- 通过一个 Format.Field 常量,有关例子,请参阅 DateFormat 中的 ERA_FIELD 及其同类。
- 构造方法 FieldPosition(Format.Field attribute) 为给定的字段常量创建一个 FieldPosition 对象。
- 构造方法 FieldPosition(Format.Field attribute, int fieldID) 为给定的字段创建一个 FieldPosition 对象。
- 构造方法 FieldPosition(int field) 为给定字段创建一个 FieldPosition 对象。
- int getBeginIndex() 获取请求字段中第一个字符的索引。
- int getEndIndex() 获取紧跟请求字段中最后一个字符的字符索引。
- int getField() 获取字段的标识符。
- Format.Field getFieldAttribute() 以来自 Field 子类之一的属性常量返回该字段的标识符。
- void setBeginIndex(int bi) 设置起始索引。
- void setEndIndex(int ei) Sets the end index.由 Format 的子类使用。
RoundingMode 重要
注意:
- UP 向远离零的方向舍入。舍弃非零部分,并将非零舍弃部分相邻的一位数字加一。
- DOWN 向接近零的方向舍入。舍弃非零部分,同时不会非零舍弃部分相邻的一位数字加一,采取截取行为。
- CEILING 向正无穷的方向舍入。如果为正数,舍入结果同ROUND_UP一致;如果为负数,舍入结果同ROUND_DOWN一致。注意:此模式不会减少数值大小。
- FLOOR 向负无穷的方向舍入。如果为正数,舍入结果同ROUND_DOWN一致;如果为负数,舍入结果同ROUND_UP一致。注意:此模式不会增加数值大小。
- HALF_UP 向“最接近”的数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分>= 0.5,则舍入行为与ROUND_UP相同;否则舍入行为与ROUND_DOWN相同。这种模式也就是我们常说的我们的“四舍五入”。
- HALF_DOWN 向“最接近”的数字舍入,如果与两个相邻数字的距离相等,则为向下舍入的舍入模式。如果舍弃部分> 0.5,则舍入行为与ROUND_UP相同;否则舍入行为与ROUND_DOWN相同。这种模式也就是我们常说的我们的“五舍六入”。
- HALF_EVEN 向“最接近”的数字舍入,如果与两个相邻数字的距离相等,则相邻的偶数舍入。如果舍弃部分左边的数字奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意:在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况,如果前一位为奇数,则入位,否则舍去。
- UNNECESSARY 断言请求的操作具有精确的结果,因此不需要舍入。如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。
输入 | UP | DOWN | CEILING | FLOOR | HALF_UP | HALF_DOWN | HALF_EVEN | UNNECESSARY |
---|---|---|---|---|---|---|---|---|
5.5 | 6 | 5 | 6 | 5 | 6 | 5 | 6 | Exception |
2.5 | 3 | 2 | 3 | 2 | 3 | 2 | 2 | Exception |
1.6 | 2 | 1 | 2 | 1 | 2 | 2 | 2 | Exception |
1.1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | Exception |
1.0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
-1.0 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
-1.1 | -2 | -1 | -1 | -2 | -1 | -1 | -1 | Exception |
-1.6 | -2 | -1 | -1 | -2 | -2 | -2 | -2 | Exception |
-2.5 | -3 | -2 | -2 | -3 | -3 | -2 | -2 | Exception |
-5.5 | -6 | -5 | -5 | -6 | -6 | -5 | -6 | Exception |
DecimalFormatSymbols 了解即可
- DecimalFormatSymbols() 为默认的语言环境创建一个 DecimalFormatSymbols 对象。
- DecimalFormatSymbols(Locale locale) 为给定的语言环境创建一个 DecimalFormatSymbols 对象。
- static Locale[] getAvailableLocales() 返回一个数组,它包括所有此类的 getInstance 方法可为之返回本地化实例的语言环境。
- static DecimalFormatSymbols getInstance() 获取默认语言环境的 DecimalFormatSymbols 实例。
- static DecimalFormatSymbols getInstance(Locale locale) 获取指定语言环境的 DecimalFormatSymbols 实例。
- Currency getCurrency() 获得这些 DecimalFormatSymbols 的货币。
- String getCurrencySymbol() 返回这些 DecimalFormatSymbols 货币在其语言环境中的货币符号。
- char getDecimalSeparator() 获得用于十进制符号的字符。
- char getDigit() 获得用于某种模式中数字的字符。
- String getExponentSeparator() 返回用于分隔尾数和指数的字符串。
- char getGroupingSeparator() 获得用于千位分隔符的字符。
- String getInfinity() 获得用于表示无穷大的字符串。
- String getInternationalCurrencySymbol() 返回这些 DecimalFormatSymbols 货币的 ISO 4217 货币代码。
- char getMinusSign() 获得用于表示减号的字符。
- char getMonetaryDecimalSeparator() 返回货币小数点分隔符。
- String getNaN() 获得用于表示“非数字”的字符串。
- char getPatternSeparator() 获得用于在模式中分隔正数和负数子模式的字符。
- char getPercent() 获得用于百分数符号的字符。
- char getPerMill() 获得用于千分数符号的字符。
- char getZeroDigit() 获得用于零的字符。
- void setCurrency(Currency currency) 设置这些 DecimalFormatSymbols 的货币。
- void setCurrencySymbol(String currency) 设置这些 DecimalFormatSymbols 货币在其语言环境中的货币符号。
- void setDecimalSeparator(char decimalSeparator) 设置用于十进制符号的字符。
- void setDigit(char digit) 设置用于某种模式中数字的字符。
- void setExponentSeparator(String exp) 设置用于分隔尾数和指数的字符串。
- void setGroupingSeparator(char groupingSeparator) 设置用于千位分隔符的字符。
- void setInfinity(String infinity) 设置用于表示无穷大的字符串。
- void setInternationalCurrencySymbol(String currencyCode) 设置这些 DecimalFormatSymbols 货币的 ISO 4217 货币代码。
- void setMinusSign(char minusSign) 设置用于表示减号的字符。
- void setMonetaryDecimalSeparator(char sep) 设置货币小数点分隔符。
- void setNaN(String NaN) 设置用于表示“非数字”的字符串。
- void setPatternSeparator(char patternSeparator) 设置用于在模式中分隔正数和负数子模式的字符。
- void setPercent(char percent) 设置用于百分数符号的字符。
- void setPerMill(char perMill) 设置用于千分数符号的字符。
- void setZeroDigit(char zeroDigit) 设置用于零的字符。
public class Test {
public static void main(String[] args) {
DecimalFormat format = (DecimalFormat) NumberFormat.getNumberInstance();
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
System.out.println("---------------------DecimalFormatSymbols----------------");
System.out.println(symbols.getDecimalSeparator());//【.】用于十进制符号的字符
System.out.println(symbols.getDigit());//【#】用于某种模式中数字的字符
System.out.println(symbols.getExponentSeparator());//【E】用于分隔尾数和指数的字符串
System.out.println(symbols.getGroupingSeparator());//【,】用于千位分隔符的字符
System.out.println(symbols.getMinusSign());//【-】用于表示减号的字符
System.out.println(symbols.getMonetaryDecimalSeparator());//【.】货币小数点分隔符
System.out.println(symbols.getPercent());//【%】用于百分数符号的字符
System.out.println(symbols.getPerMill());//【‰】用于千分数符号的字符
System.out.println(symbols.getZeroDigit());//【0】用于零的字符
System.out.println("---------------------2----------------");
System.out.println(symbols.getCurrency());//【CNY】货币
System.out.println(symbols.getInternationalCurrencySymbol());//【CNY】货币的 ISO 4217 货币代码
System.out.println(symbols.getCurrencySymbol());//【¥】货币在其语言环境中的货币符号
System.out.println(symbols.getInfinity());//【∞】获得用于表示无穷大的字符串
System.out.println(symbols.getNaN());//【�】获得用于表示“非数字”的字符串
System.out.println(symbols.getPatternSeparator());//【;】用于在模式中分隔正数和负数子模式的字符
System.out.println(Arrays.toString(DecimalFormatSymbols.getAvailableLocales()));//可使用的语言环境
}
}
public class Test {
public static void main(String[] args) {
DecimalFormat format = (DecimalFormat) NumberFormat.getNumberInstance();
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
System.out.println("---------------------DecimalFormatSymbols----------------");
System.out.println(symbols.getDecimalSeparator());//【.】用于十进制符号的字符
System.out.println(symbols.getDigit());//【#】用于某种模式中数字的字符
System.out.println(symbols.getExponentSeparator());//【E】用于分隔尾数和指数的字符串
System.out.println(symbols.getGroupingSeparator());//【,】用于千位分隔符的字符
System.out.println(symbols.getMinusSign());//【-】用于表示减号的字符
System.out.println(symbols.getMonetaryDecimalSeparator());//【.】货币小数点分隔符
System.out.println(symbols.getPercent());//【%】用于百分数符号的字符
System.out.println(symbols.getPerMill());//【‰】用于千分数符号的字符
System.out.println(symbols.getZeroDigit());//【0】用于零的字符
System.out.println("---------------------2----------------");
System.out.println(symbols.getCurrency());//【CNY】货币
System.out.println(symbols.getInternationalCurrencySymbol());//【CNY】货币的 ISO 4217 货币代码
System.out.println(symbols.getCurrencySymbol());//【¥】货币在其语言环境中的货币符号
System.out.println(symbols.getInfinity());//【∞】获得用于表示无穷大的字符串
System.out.println(symbols.getNaN());//【�】获得用于表示“非数字”的字符串
System.out.println(symbols.getPatternSeparator());//【;】用于在模式中分隔正数和负数子模式的字符
System.out.println(Arrays.toString(DecimalFormatSymbols.getAvailableLocales()));//可使用的语言环境
}
}
[, ar_AE, ar_JO, ar_SY, hr_HR, fr_BE, es_PA, mt_MT, es_VE, bg, zh_TW, it, ko, uk, lv, da_DK, es_PR, vi_VN, en_US, sr_ME, sv_SE, es_BO, en_SG, ar_BH, pt, ar_SA, sk, ar_YE, hi_IN, ga, en_MT, fi_FI, et, sv, cs, sr_BA_#Latn, el, uk_UA, hu, fr_CH, in, es_AR, ar_EG, ja_JP_JP_#u-ca-japanese, es_SV, pt_BR, be, is_IS, cs_CZ, es, pl_PL, tr, ca_ES, sr_CS, ms_MY, hr, lt, es_ES, es_CO, bg_BG, sq, fr, ja, sr_BA, is, es_PY, de, es_EC, es_US, ar_SD, en, ro_RO, en_PH, ca, ar_TN, sr_ME_#Latn, es_GT, sl, ko_KR, el_CY, es_MX, ru_RU, es_HN, zh_HK, no_NO_NY, hu_HU, th_TH, ar_IQ, es_CL, fi, ar_MA, ga_IE, mk, tr_TR, et_EE, ar_QA, sr__#Latn, pt_PT, fr_LU, ar_OM, th, sq_AL, es_DO, es_CU, ar, ru, en_NZ, sr_RS, de_CH, es_UY, ms, el_GR, iw_IL, en_ZA, th_TH_TH_#u-nu-thai, hi, fr_FR, de_AT, nl, no_NO, en_AU, vi, nl_NL, fr_CA, lv_LV, de_LU, es_CR, ar_KW, sr, ar_LY, mt, it_CH, da, de_DE, ar_DZ, sk_SK, lt_LT, it_IT, en_IE, zh_SG, ro, en_CA, nl_BE, no, pl, zh_CN, ja_JP, de_GR, sr_RS_#Latn, iw, en_IN, ar_LB, es_NI, zh, mk_MK, be_BY, sl_SI, es_PE, in_ID, en_GB]
[, ar_AE, ar_JO, ar_SY, hr_HR, fr_BE, es_PA, mt_MT, es_VE, bg, zh_TW, it, ko, uk, lv, da_DK, es_PR, vi_VN, en_US, sr_ME, sv_SE, es_BO, en_SG, ar_BH, pt, ar_SA, sk, ar_YE, hi_IN, ga, en_MT, fi_FI, et, sv, cs, sr_BA_#Latn, el, uk_UA, hu, fr_CH, in, es_AR, ar_EG, ja_JP_JP_#u-ca-japanese, es_SV, pt_BR, be, is_IS, cs_CZ, es, pl_PL, tr, ca_ES, sr_CS, ms_MY, hr, lt, es_ES, es_CO, bg_BG, sq, fr, ja, sr_BA, is, es_PY, de, es_EC, es_US, ar_SD, en, ro_RO, en_PH, ca, ar_TN, sr_ME_#Latn, es_GT, sl, ko_KR, el_CY, es_MX, ru_RU, es_HN, zh_HK, no_NO_NY, hu_HU, th_TH, ar_IQ, es_CL, fi, ar_MA, ga_IE, mk, tr_TR, et_EE, ar_QA, sr__#Latn, pt_PT, fr_LU, ar_OM, th, sq_AL, es_DO, es_CU, ar, ru, en_NZ, sr_RS, de_CH, es_UY, ms, el_GR, iw_IL, en_ZA, th_TH_TH_#u-nu-thai, hi, fr_FR, de_AT, nl, no_NO, en_AU, vi, nl_NL, fr_CA, lv_LV, de_LU, es_CR, ar_KW, sr, ar_LY, mt, it_CH, da, de_DE, ar_DZ, sk_SK, lt_LT, it_IT, en_IE, zh_SG, ro, en_CA, nl_BE, no, pl, zh_CN, ja_JP, de_GR, sr_RS_#Latn, iw, en_IN, ar_LB, es_NI, zh, mk_MK, be_BY, sl_SI, es_PE, in_ID, en_GB]
数值格式化 NumberFormat DecimalFormat RoundingMode的更多相关文章
- 数值格式化 NumberFormat、 DecimalFormat、 RoundingMode
NumberFormat [简介] java.text.NumberFormat extends java.text.Format extends java.lang.Object 实现的接口:Ser ...
- HighCharts日期及数值格式化
1.函数原型 1 dateFormat(Stringformat,[Numbertime],[Booleancapitalize])::String 2.说明 格式化JavaScript 时间(也 ...
- js 数值格式化函数
function ForDight(Dight,How){ ,How))/Math.pow(,How); return Dight; } //ForDight(Dight,How):数值格式化函数; ...
- 【Java实战】DecimalFormat对数值格式化的舍入问题——RoundingMode
转自http://blog.csdn.net/alanzyy/article/details/8465098 背景: 在对数值做一些计算的时候,往往我们需要控制计算结果的精度,所以会使用到Dec ...
- NumberFormat DecimalFormat
http://blog.csdn.net/evangel_z/article/details/7624503 http://blog.163.com/wangzhengquan85@126/blog/ ...
- java 常用类库:格式化NumberFormat;SimpleDataFormat类(转换Data()对象);DateTimeFormatter 转换LocalDateTime时间对象
NumberFormat类 该类是一个做数字格式化的类,它是一个抽象类,无法实例化.它提供了parse()和format()方法,其中format用于将数值,格式转化成字符串,parse()用于把字符 ...
- freemarker数值格式化
语法:number?string(exp) 说明:根据给定的格式化表达式将数值格式化为字符串. 参数:格式化字符串,"0"表示固定占位(至少有这个位数,不足位数用0代替),&quo ...
- 数字格式化NumberFormat
做财务的同学遇到逗号分隔的数值格式,会用到NumberFormat类格式化数据 BigDecimal bigDecimal = new BigDecimal("1000000000.4110 ...
- Velocity 数值格式化(NumberTool工具类):保留两位小数和格式化千分位、取整
Velocity 自带的工具类:NumberTool 实现数字格式化:保留两位小数和格式化千分位,以及取整. NumberTool 的 format(String format, Object obj ...
随机推荐
- web_reg_save_param_regexp函数的用法
关联从服务器返回的所有的内容: 本例通过一个使用HTTP/HTML协议发送.获取服务器数据的vuser脚本,分析LoadRunner如何进行HTTP关联. 下面这个例子包括两个事务:上传数据到服务器. ...
- 关于node的path模块
const path=require('path'); //basename('绝对路径','截取的后缀') 返回文件的扩展名 let a=path.basename('C:\\temp\\myfil ...
- 关联的CURD
在保存的前面必须先建立好关联.但是默认情况下还是不会自动保存,如果保存会出错. Cascade all所有关联的所有持久化都是级联到另一个对象.保存这个对象的时候关联的对象自动保存. Cascade只 ...
- 搭建samba 共享openstack开发环境
centos7.2 openstack环境为allinone 模式,这样跑代码好处理 安装smb [root@controller ~]# yum install -y samba samba-cli ...
- Node.js下的Hello World
Node.js技术现在可谓是如火如荼,前后端都统一为Javascript的体验绝对是受到了很多人的青睐,我都后悔以前没抽时间好好学一学Javascript了. 首先,我来介绍一下Node.js.本人实 ...
- bzoj1116 [POI2008]CLO 边双联通分量
只需对每个联通块的$dfs$树检查有没有返租边即可 复杂度$O(n + m)$ #include <cstdio> #include <cstring> using names ...
- hdu 1561 树形dp+分组背包
题意:就是给定n个点,每个地点有value[i]的宝物,而且有的宝物必须是另一个宝物取了才能取,问取m个点可以获得的最多宝物价值. 一个子节点就可以返回m个状态,每个状态表示容量为j(j<=m) ...
- Python 温度转换实例分析
#TempConvert.py Tempstr=input('请输入要转换的温度值:') if Tempstr[-1] in ['C','c']: F=1.8*eval(Tempstr[0:-1])+ ...
- 某DP题目1
题意: 有n个由左右括号组成的字符串,选择其中若干字符串,使得组成的括号序列合法且长度最长.n <= 1000,n个字符串的长度和 <= 10000. 分析: 其实我一开始做这一题的时候, ...
- JavaScript设计模式与开发实践——读书笔记1.高阶函数(下)
上部分主要介绍高阶函数的常见形式,本部分将着重介绍高阶函数的高级应用. 1.currying currying指的是函数柯里化,又称部分求值.一个currying的函数会先接受一些参数,但不立即求值, ...