数值格式化 NumberFormat, DecimalFormat

参考链接:
NumberFormat
DecimalFormat的使用
DecimalFormat
解决DecimalFormat的0.00

import java.math.RoundingMode;
import java.text.*;

public class Demo {

    public static void main(String[] args) {
        Demo demo = new Demo();

        demo.testGetInstance();
//        demo.testSetDigits();
//        demo.testRoundingMode();
//        demo.testParse();
        demo.decimalFormatTest();

    }

    public 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%
        // 去除逗号分隔符
        NumberFormat numberFormat = NumberFormat.getInstance();
        numberFormat.setGroupingUsed(false);// 是否以逗号隔开, 默认true以逗号隔开,
        System.out.println(numberFormat.format(d));//23323.332
    }

    public void decimalFormatTest() {
    	//0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置
    	
        double pi = 3.1415927;//圆周率
        //取一位整数
        System.out.println(new DecimalFormat("0").format(pi));//3
        //取一位整数和两位小数
        System.out.println(new DecimalFormat("0.00").format(pi));//3.14
        //取两位整数和三位小数,整数不足部分以0填补。
        System.out.println(new DecimalFormat("00.000").format(pi));// 03.142
        //取所有整数部分
        System.out.println(new DecimalFormat("#").format(pi));//3
        //以百分比方式计数,并取两位小数
        System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%
        long c =299792458;//光速
        //显示为科学计数法,并取五位小数
        System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8
        //显示为两位整数的科学计数法,并取四位小数
        System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7
        //每三位以逗号进行分隔。
        System.out.println(new DecimalFormat(",###").format(c));//299,792,458
        //将格式嵌入文本
        System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c));//光速大小为每秒299,792,458米。

        //每三位以逗号进行分隔,保留两位小数点
        double d1 = 1234567111.89;
        System.out.println(d1); //1.23456711189E9
        System.out.println(new DecimalFormat(",##0.00").format(d1)); //1,234,567,111.89
        //每三位以逗号进行分隔,保留两位小数点
        double d2 = 1234567111.80;
        System.out.println(new DecimalFormat(",##0.00").format(d2));//1,234,567,111.80
        //每三位以逗号进行分隔,保留两位小数点
        double d3 = 1234567111.00;
        System.out.println(new DecimalFormat(",##0.00").format(d3));//1,234,567,111.00
        double d5 = 0.00;  // -0.00查看效果 -> -0.00
        //每三位以逗号进行分隔,保留两位小数点
        System.out.println(new DecimalFormat(",##0.00").format(d5));//0.00
        double d6 = 0; // -0查看效果->0.00
        //每三位以逗号进行分隔,保留两位小数点
        System.out.println(new DecimalFormat(",##0.00").format(d6));//0.00

    }

    public 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
    }

    public 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
    }

    public 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();
        }
    }



}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值