NumberFormat格式化处理数字

一、官方API文档

public abstract class NumberFormat
extends Format

NumberFormat是一个抽象类继承自Format

NumberFormat is the abstract base class for all number formats. This class provides the interface for formatting and parsing numbers. NumberFormat also provides methods for determining which locales have number formats, and what their names are.

NumberFormat是一个抽象的数字格式化类。该类提供的格式和解析数字的接口,NumberFormat也提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名称是什么。

NumberFormat helps you to format and parse numbers for any locale. Your code can be completely independent of the locale conventions for decimal points, thousands-separators, or even the particular decimal digits used, or whether the number format is even decimal.

NumberFormat可以帮助你格式和解析任何语言的数字,使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。

二、获取Number的实例

NumberFormat format = NumberFormat.getInstance();

三、测试代码


public class TestNumberFormat {
    public static void main(String[] args) {
        testNumberFormatGetInstance();
        System.out.println("----------testNumberFormatDigits------------");
        testNumberFormatDigits();
        System.out.println("-----------testNumberFormatSetRoundingMode-----------");
        testNumberFormatSetRoundingMode();
        System.out.println("-----------testNumberFormatParse-----------");
        testNumberFormatParse();
    }

    private static void testNumberFormatGetInstance() {
        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 testNumberFormatDigits() {
        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 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 ,方便在一些文件序号等的处理

}

 

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值