Java学习之旅(三六):数字格式化

数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字等。数字格式化操作主要针对的是浮点型数据,包括 double 型和 float 型数据。在 Java 中使用 java.text.DecimalFormat 格式化数字。在 Java 中没有格式化的数据遵循以下规则:

  • 如果数据绝对值大于 0.001 并且小于 10000000,使用常规小数形式表示;
  • 如果数据绝对值小于 0.001 或者大于 10000000,使用科学计数法表示

由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在 Java 中可以使用 DecimalFormat 类进行格式化操作。DecimalFormat 是 NumberFormat 的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中的 applyPattern() 方法来实现数字格式化。当格式化数字时,在 DecimalFormat 类中使用一些特殊字符构成一个格式化模板,是数字按照一定的特殊字符规则进行匹配。以下列举了格式化模板中的特殊字符及其所代表的含义

DecimalFormat 类中特殊字符说明
字符说明
0代表阿拉伯数字,使用特殊字符“0”表示数字的一位阿拉伯数字,如果该位不存在数字,则显示 0
#代表阿拉伯数字,使用特殊字符“#”表示数字的一位阿拉伯数字,如果该位存在数字,则显示字符;如果该位不存在数字,则不显示
.小数分隔符或货币小数分隔符
-负号
,分组分隔符
E分隔科学计数法中的尾数和指数
%本符号放置在数字的前缀或后缀,将数字乘以 100 显示为百分数
\u2030本符号放置在数字的前缀或后缀,将数字乘以 1000 显示为千分数
\u00A4本符号放置在数字的前缀或后缀,作为货币记号
'单引号,当上述特殊字符出现在数字中时,应为特殊字符添加单引号,系统会将此符号视为普通符号处理
import java.text.DecimalFormat;

public class DecimalFormatDemo {

    //使用实例化对象时设置格式化模式
    static public void SimpleFormat(String pattern, double value) {
        // 实例化 DecimalFormat 对象
        DecimalFormat decimalFormat = new DecimalFormat(pattern);
        // 将数字进行格式化
        String result = decimalFormat.format(value);
        System.out.println("value = " + value + "  pattern = " + pattern + "  格式化结果为:" + result);
    }

    //使用 applyPattern() 方法对数字进行格式化
    static public void applyPatternFormat(String pattern, double value) {
        // 实例化 DecimalFormat 对象
        DecimalFormat decimalFormat = new DecimalFormat();
        // 调用 applyPattern() 方法设置格式化模板
        decimalFormat.applyPattern(pattern);
        System.out.println("value = " + value + "  pattern = " + pattern + "  格式化结果为:" + decimalFormat.format(value));

    }

    public static void main(String[] args) {
        // 调用静态 SimpleFormat() 方法
        SimpleFormat("###,###,###.###", 123456789.789);
        // 在数字后面加上单位
        SimpleFormat("00000000.###kg", 123456.789);
        // 按照格式模板格式化数字,不存在的位以0显示
        SimpleFormat("000000.000", 123.456);
        // 将数字转换为百分数形式
        applyPatternFormat("##.##%", 12.34);
        // 将数字转换为千分数形式
        applyPatternFormat("##.##\u2030", 12.34);
        // 将小数点后格式化为两位
        applyPatternFormat("######.##", 123456.789);

    }

}

 除此之外,还可使用 setGroupingSize() 和 setGroupingUsed() 方法来对数字进行分组操作。

import java.text.DecimalFormat;

public class DecimalFormatDemo {
    
    public static void main(String[] args) {

        DecimalFormat decimalFormat = new DecimalFormat();
        decimalFormat.setGroupingSize(2);   // 设置将数字分组为2
        double value = 123456.789;
        String result = decimalFormat.format(value);
        System.out.println("将" + value + "以每两个数字分组,结果为:" + result);
        decimalFormat.setGroupingUsed(false);   // 设置不允许数字进行分组
        String result1 = decimalFormat.format(value);
        System.out.println("不允许数字分组:" + result1);

    }

}

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值