java常用类之 DecimalFormat

java.text
类 DecimalFormat

继承关系
java.lang.Object
    >>java.text.Format
        >> java.text.NumberFormat
             >>java.text.DecimalFormat

已实现的接口
     Serializable, Cloneable


基本概述

DecimalFormatNumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。

要获取具体语言环境的 NumberFormat(包括默认语言环境),可调用 NumberFormat 的某个工厂方法,如 getInstance()。通常不直接调用 DecimalFormat 的构造方法,因为 NumberFormat 的工厂方法可能返回不同于 DecimalFormat 的子类。如果需要自定义格式对象,可执行:

 NumberFormat f = NumberFormat.getInstance(loc);
 if (f instanceof DecimalFormat) {
     ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
 }
 

DecimalFormat 包含一个模式 和一组符号。可直接使用 applyPattern() 或间接使用 API 方法来设置模式。符号存储在 DecimalFormatSymbols 对象中。使用 NumberFormat 工厂方法时,可从已本地化的 ResourceBundle 中读取模式和符号。 

舍入模式
DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。默认情况下,它使用 RoundingMode.HALF_EVEN

同步

DecimalFormat 通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问某个格式,则必须保持外部同步。

测试代码

/*
  * 实例化
  */

  DecimalFormat df=(DecimalFormat) DecimalFormat.getInstance();
  DecimalFormat df1=(DecimalFormat) NumberFormat.getInstance();
  
  
  /*
   * 设定小数位数
   * public int getMaximumFractionDigits()
   *   获取某个数的小数部分中所允许的最大数字位数。
   *   如需格式化除 BigInteger 和 BigDecimal 对象之外的数,则使用返回值的低位部分和 340。
   */
  //系统默认保留三位
  System.out.println(df.format(12.34567));    //12.346
  //设置指定位数
  df.setMaximumFractionDigits(2);     //设置为两位小数
  System.out.println(df.format(12.34567));    //12.35
  
  
  /*
   * 将数字转为百分比
   */
  df.applyPattern("##.00%");    //两位小数,不足位数自动补0
  System.out.println(df.format(123.456789)); //12345.68%
  System.out.println(df.format(1));   //100.00%
  System.out.println(df.format(0.015));  //1.50%
  
  df.applyPattern("##.##%");    //最多两位小数
  System.out.println(df.format(123.456789)); //12345.68%
  System.out.println(df.format(1));   //100%
  System.out.println(df.format(0.015));  //1.5%
  
  df.setMaximumFractionDigits(2);
  System.out.println(df.format(123.45678)); //12345.68%
  System.out.println(df.format(1));   //100%
  System.out.println(df.format(0.035));  //3.5%
  
  /*
   * 设置数字的分组大小
   */
  df.setGroupingSize(3);
  System.out.println(df1.format(123456789)); //123,456,789
  //禁用分组设置
  df1.setGroupingUsed(false);
  System.out.println(df1.format(123456));   //123456
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值