美文网首页Java web
Java NumberFormat 数字格式工具类

Java NumberFormat 数字格式工具类

作者: 任未然 | 来源:发表于2020-04-23 17:15 被阅读0次

一. 概述

在日常开发中, 有些场景我们需要对数字格式进行处理, 例如小数位数, 价格, 百分数等, 下面介绍一下java自带的工具类NumberFormat

二. 示例说明

2.1 数字按不同国家设置显示格式

import java.text.NumberFormat;
import java.util.Locale;
public class FormattingNumbers {
    public static void main(String[] args) {
        double n = 1240.35;
        // 获取美国的数字格式
        NumberFormat nf = NumberFormat.getInstance(new Locale("en", "US"));
        String val = nf.format(n);
        System.out.println(val);
        // 获取斯洛伐克的数字格式
        NumberFormat nf2 = NumberFormat.getInstance(new Locale("sk", "SK"));
        String val2 = nf2.format(n);
        System.out.println(val2);        
        // 获取丹麦的数字格式
        NumberFormat nf3 = NumberFormat.getInstance(new Locale("da", "DK"));
        String val3 = nf3.format(n);
        System.out.println(val3);
    }
}

输出结果

1,240.35
1 240,35
1.240,35

2.2 控制小数位数

import java.text.NumberFormat;
import java.util.Locale;
public class FractionDigits {
    public static void main(String[] args) {
        double val1 = 4.5678934;
        double val2 = 2.3;
        NumberFormat nf1 = NumberFormat.getInstance(new Locale("zh", "CN"));
        NumberFormat nf2 = NumberFormat.getInstance(new Locale("zh", "CN"));
        // 设置小数最少位数, 不够补零
        nf1.setMinimumFractionDigits(2);
        // 设置小数最大位数, 位数超出根据策略进行取舍, 默认四舍五入
        nf1.setMaximumFractionDigits(4);
        nf2.setMaximumFractionDigits(4);
        // 采取四舍五入策略
        nf1.setRoundingMode(RoundingMode.UP);
        // 不采取四舍五入策略
        nf2.setRoundingMode(RoundingMode.DOWN);
        System.out.println(nf1.format(val1));
        System.out.println(nf1.format(val2));
        System.out.println(nf2.format(val1));
    }
}

输出结果

4.5679
2.30
4.5678

附BigDecimal 小数位控制

/**
     * 四舍五入保留多少位小数
     * @param newScale 保留多少位小数
     */
    public static double formatDoubleByScale(double num, int newScale) {
        BigDecimal bg = doubleToBigDecimal(num).setScale(newScale, RoundingMode.UP);
        return bg.doubleValue();
    }

    /**
     * 不四舍五入保留多少位小数
     * @param newScale 保留多少位小数
     */
    public static double formatDoubleByScaleN(double num, int newScale) {
        BigDecimal bg = doubleToBigDecimal(num).setScale(newScale, RoundingMode.DOWN);
        return bg.doubleValue();
    }

2.3 格式化百分比

import java.text.NumberFormat;
import java.util.Locale;
public class Percentages {
    public static void main(String[] args) {
        double num1 = 0.234;
        String num2 = "35.5%";
        // 获取百分数处理对象
        NumberFormat pf = NumberFormat.getPercentInstance(Locale.CHINA);
        // 数字转百分数
        String format = pf.format(num1);
        // 百分数转数字
        Double parse = (Double) pf.parse(num2);
        System.out.println(format);
        System.out.println(parse);
    }
}

输出结果

23%
0.355

2.4 格式货币

import java.text.NumberFormat;
import java.util.Locale;
public class Currencies {
    public static void main(String[] args) {
        int val = 23500;
        // 获取美国货币格式
        NumberFormat cf1 = NumberFormat.getCurrencyInstance(new Locale("en", "US"));
        System.out.println(cf1.format(val));
        // 获取斯洛伐克货币格式
        NumberFormat cf2 = NumberFormat.getCurrencyInstance(new Locale("sk", "SK"));
        System.out.println(cf2.format(val));
        // 获取中国货币格式
        NumberFormat cf3 = NumberFormat.getCurrencyInstance(new Locale("zh", "CN"));
        System.out.println(cf3.format(val));      
    }
}

输出结果

$23,500.00
23 500,00 €
¥23,500.00

2.5 解析数字

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class ParsingNumbers {
    public static void main(String[] args) throws ParseException {
        NumberFormat nf = NumberFormat.getInstance(new Locale("sk", "SK"));
        Number num = nf.parse("150000,45646");
        System.out.println(num.doubleValue());
    }
}

输出结果

150000.45646

相关文章

网友评论

    本文标题:Java NumberFormat 数字格式工具类

    本文链接:https://www.haomeiwen.com/subject/movaihtx.html