标签:
static int FRACTION_FIELD 用于构造FieldPosition对象的字段常量。 static int INTEGER_FIELD 用于构造FieldPosition对象的字段常量。
public static void main(String[] args) { NumberFormat numberFormat = NumberFormat.getInstance(); StringBuffer stringBuffer1 = new StringBuffer(); FieldPosition fieldPosition = new FieldPosition(NumberFormat.INTEGER_FIELD); BigDecimal bigDecimal = new BigDecimal("1.23456789"); stringBuffer1 = numberFormat.format(bigDecimal, stringBuffer1, fieldPosition); System.out.println("stringBuffer1 = " + stringBuffer1); System.out.println("INTEGER:beginIndex=" + fieldPosition.getBeginIndex() + ",endIndex=" + fieldPosition.getEndIndex()); fieldPosition = new FieldPosition(NumberFormat.FRACTION_FIELD); StringBuffer stringBuffer2 = new StringBuffer(); stringBuffer2 = numberFormat.format(bigDecimal, stringBuffer2, fieldPosition); System.out.println("stringBuffer2 = " + stringBuffer2); System.out.println("FRACTION:beginIndex=" + fieldPosition.getBeginIndex() + ",endIndex=" + fieldPosition.getEndIndex()); }
stringBuffer1 = 1.235 INTEGER:beginIndex=0,endIndex=1 stringBuffer2 = 1.235 FRACTION:beginIndex=2,endIndex=5
static NumberFormat.Field CURRENCY 标识货币字段的常量。 static NumberFormat.Field DECIMAL_SEPARATOR 标识小数点字段的常量。 static NumberFormat.Field EXPONENT 标识指数字段的常量。 static NumberFormat.Field EXPONENT_SIGN 标识指数符号 (exponent sign) 字段的常量。 static NumberFormat.Field EXPONENT_SYMBOL 标识指数符号 (exponent symbol) 字段的常量。 static NumberFormat.Field FRACTION 标识小数字段的常量。 static NumberFormat.Field GROUPING_SEPARATOR 标识组分隔符字段的常量。 static NumberFormat.Field INTEGER 标识整数字段的常量。 static NumberFormat.Field PERCENT 标识百分数字段的常量。 static NumberFormat.Field PERMILLE 标识千分数字段的常量。 static NumberFormat.Field SIGN 标识符号字段的常量。
public static void main(String[] args) { NumberFormat numberFormat = NumberFormat.getInstance(); StringBuffer stringBuffer1 = new StringBuffer(); FieldPosition fieldPosition = new FieldPosition(NumberFormat.Field.INTEGER); BigDecimal bigDecimal = new BigDecimal("1.23456789"); stringBuffer1 = numberFormat.format(bigDecimal, stringBuffer1, fieldPosition); System.out.println("stringBuffer1 = " + stringBuffer1); System.out.println("INTEGER:beginIndex=" + fieldPosition.getBeginIndex() + ",endIndex=" + fieldPosition.getEndIndex()); fieldPosition = new FieldPosition(NumberFormat.Field.FRACTION); StringBuffer stringBuffer2 = new StringBuffer(); stringBuffer2 = numberFormat.format(bigDecimal, stringBuffer2, fieldPosition); System.out.println("stringBuffer2 = " + stringBuffer2); System.out.println("FRACTION:beginIndex=" + fieldPosition.getBeginIndex() + ",endIndex=" + fieldPosition.getEndIndex()); }
stringBuffer1 = 1.235 INTEGER:beginIndex=0,endIndex=1 stringBuffer2 = 1.235 FRACTION:beginIndex=2,endIndex=5
public static void main(String[] args) { DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); StringBuffer stringBuffer = new StringBuffer(); FieldPosition pos = new FieldPosition(DateFormat.Field.DAY_OF_MONTH); stringBuffer = dateFormat.format(new Date(), stringBuffer, pos); System.out.println("stringBuffer = " + stringBuffer); System.out.println("DATE_FIELD:beginIndex= " + pos.getBeginIndex() + ",endIndex=" + pos.getEndIndex()); }
stringBuffer = 2016年6月28日 上午11时07分18秒 DATE_FIELD:beginIndex= 7,endIndex=9
public static void main(String[] args) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String strings[] = {"xxx 2016-06-28 xxx1", "20160628 xxx2"}; for (int i = 0; i < strings.length; i++) { ParsePosition parsePosition = new ParsePosition(4);//从第四位开始处理 Date date = simpleDateFormat.parse(strings[i], parsePosition); //解析错误,返回null if (date == null) { System.out.println("无效日期:" + strings[i]); System.out.println("解析出错的索引=" + parsePosition.getErrorIndex()); System.out.println("当前索引=" + parsePosition.getIndex()); continue; } String substring = strings[i].substring(parsePosition.getIndex()); System.out.println("日期=" + date + ",剩余部分:" + substring); } }
日期=Tue Jun 28 00:00:00 CST 2016,剩余部分: xxx1 无效日期:20160628 xxx2 解析出错的索引=8 当前索引=4
public static void main(String[] args) throws Exception { //常规数值 NumberFormat format1 = NumberFormat.getNumberInstance(); System.out.println(format1.getMaximumIntegerDigits());//2147483647 System.out.println(format1.getMinimumIntegerDigits());//1 System.out.println(format1.getMaximumFractionDigits());//3 System.out.println(format1.getMinimumFractionDigits());//0 System.out.println(format1.isGroupingUsed());//true System.out.println(format1.isParseIntegerOnly());//false System.out.println(format1.format(10000000));//10,000,000 默认分组 System.out.println(format1.format(10000000.000));//10,000,000 小数点后全身0,被舍弃 System.out.println(format1.format(10000000.001));//10,000,000.001 System.out.println(format1.format(10000000.0001));//10,000,000 默认最大小数位数是3位 System.out.println(format1.parse("10000000.001"));//1.0000000001E7 默认可以解析小数 format1.setParseIntegerOnly(true); System.out.println(format1.parse("10000000.001"));//10000000 //百分比数值 NumberFormat format2 = NumberFormat.getPercentInstance(); System.out.println(format2.getMaximumIntegerDigits());//2147483647 System.out.println(format2.getMinimumIntegerDigits());//1 System.out.println(format2.getMaximumFractionDigits());//0 System.out.println(format2.getMinimumFractionDigits());//0 System.out.println(format2.isGroupingUsed());//true System.out.println(format2.isParseIntegerOnly());//false System.out.println(format2.format(1.01));//101% System.out.println(format2.format(1.001));//100% 默认最大小数位数是0 format2.setMaximumFractionDigits(1); System.out.println(format2.format(1.001));//100.1% System.out.println(format2.parse("100.1%"));// 1.001 默认可以解析小数 //货币格式 NumberFormat format3 = NumberFormat.getCurrencyInstance(); System.out.println(format3.getMaximumIntegerDigits());//2147483647 System.out.println(format3.getMinimumIntegerDigits());//1 System.out.println(format3.getMaximumFractionDigits());//2 System.out.println(format3.getMinimumFractionDigits());//2 System.out.println(format3.isGroupingUsed());//true System.out.println(format3.isParseIntegerOnly());//false System.out.println(format3.format(10000));//¥10,000.00 默认语言环境是zh_CN System.out.println(format3.parse("¥10,000.00"));//10000 }
NumberFormat f = NumberFormat.getInstance(loc); if (f instanceof DecimalFormat) { ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true); }DecimalFormat包含一个模式和一组符号。可直接使用applyPattern()或间接使用API方法来设置模式。符号存储在DecimalFormatSymbols象中。如果想要改变符号,比如小数点,可以使用和DecimalFormate关联的DecimalFormatSymbols,此类表示了DecimalFormat格式化数字所需的符号集(如小数点、组分隔符等等)。DecimalFormat 根据其语言环境数据为其自身创建一个DecimalFormatSymbols实例。如果需要更改这些符号,可从DecimalFormat#getDecimalFormatSymbols()获得DecimalFormatSymbols对象并修改它。通常程序员不需要修改DecimalFormatSymbols。
0 | 数字。阿拉伯数字,如果当前位置不存在数字,则显示为0 |
# | 数字。阿拉伯数字,在不影响数值的情况下,当前位置如果为0或者不存在,则不显示 |
. | 数字。小数分隔符或货币小数分隔符 |
- | 数字。减号 |
, | 数字。分组分隔符 |
E | 数字。分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号 |
; | 子模式边界。分隔正数和负数子模式 |
% | 前缀或后缀。乘以 100 并显示为百分数 |
\u2030 | 前缀或后缀。乘以 1000 并显示为千分数 |
¤(\u00A4) | 前缀或后缀。货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符 |
‘ | 前缀或后缀。用于在前缀或或后缀中为特殊字符加引号,例如 "‘#‘#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号:"# o‘‘clock" |
public static void main(String[] args) throws Exception { DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(); unusualSymbols.setDecimalSeparator(‘|‘); unusualSymbols.setGroupingSeparator(‘^‘); String strange = "#,##0.###"; DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols); weirdFormatter.setGroupingSize(4); String bizarre = weirdFormatter.format(12345.678); System.out.println(bizarre);//1^2345|678 }
标签:
原文地址:http://www.cnblogs.com/gjb724332682/p/5627697.html