直接使用样式

/**
     * 直接使用样式
     * '#' 表示数字, 会抹掉头尾和尾部的零
     * '0' 表示数字, 会补零
     */
    public static void applyPattern() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            // 1.设置千分位分隔符
            // 2.最少保留两位小数, 不足补零
            // 3.最多也保留两位小数, 四舍六入五成双
            // 4.小数点左边至少有零

            // #1.默认
            // f.setMinimumFractionDigits(2); // #2
            // f.setMaximumFractionDigits(2); // #3
            // #4.默认

            ((DecimalFormat) f).applyPattern("#,##0.00");
            
        }
        System.out.println(f.format(new BigDecimal("123")));
        System.out.println(f.format(new BigDecimal("1234567890.1234567890"))); // 1,234,567,890.12
        System.out.println(f.format(new BigDecimal("11.145"))); // 11.14
        System.out.println(f.format(new BigDecimal("11.155"))); // 11.16
        System.out.println(f.format(new BigDecimal("0.155"))); // 0.16

        if (f instanceof DecimalFormat) {
            // 同上,前缀加了一个 $
            // ((DecimalFormat) f).setPositivePrefix("$");
            // ((DecimalFormat) f).setNegativePrefix("$");
            ((DecimalFormat) f).applyPattern("$#,##0.00");
        }
        System.out.println(f.format(new BigDecimal("0.155"))); // $0.16
        System.out.println(f.format(new BigDecimal("-0.155"))); // -$0.16
        System.out.println("-------------------------------");
        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).applyPattern("0.###E0"); // 科学计数法
            System.out.println(f.format(new BigDecimal(1)));
            System.out.println(f.format(new BigDecimal(10)));
        }
    }

最少保留几位小数

/**
     * 最少保留几位小数
     */
    private static void keepMinFraction() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            f.setMinimumFractionDigits(4); // 最少保留4位小数,不足补零
        }
        System.out.println(f.format(12.12)); // 12.1200
    }

最多保留几位小数

private static void keepMaxFraction() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            f.setMaximumFractionDigits(4); // 最多保留4位小数,多余小数默认 HALF_EVEN(指向最近的邻居,如果一样近,指向最近的偶数)
        }
        System.out.println(f.format(12.12345)); // 12.1235
        System.out.println(f.format(12.12344)); // 12.1234
    }

限定最多保留几位小数时, 多余尾数处理方式

/**
     * 限定最多保留几位小数时, 多余尾数处理方式
     *
     * HALF_EVEN(四舍六入五成双)
     * 如果要舍弃的部分 小于 0.5,则直接舍去(向下舍入)。
     * 如果要舍弃的部分 大于 0.5,则进位(向上舍入)。
     * 如果要舍弃的部分 等于 0.5,则看前一位数字:
     * 如果前一位是 偶数,则舍去(向下舍入)。
     * 如果前一位是 奇数,则进位(向上舍入)。
     */
    private static void keepMaxFractionWithRoundingMode() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            System.out.println(f.getRoundingMode()); // 默认 HALF_EVEN, HALF_EVEN(四舍六入五成双)
            f.setMaximumFractionDigits(0); // 最多保留 0 位小数,多余小数默认 HALF_EVEN(四舍六入五成双)
        }
        System.out.println(f.format(4.5)); // 4
        System.out.println(f.format(5.5)); // 6

        f.setMaximumFractionDigits(1); // 最多保留 1 位小数,多余小数默认 HALF_EVEN(四舍六入五成双)
        System.out.println(f.format(11.45)); // 11.4
        System.out.println(f.format(11.55)); // 11.6

        f.setMaximumFractionDigits(2); // 最多保留 2 位小数,多余小数默认 HALF_EVEN(四舍六入五成双)
        System.out.println(f.format(11.244)); // 11.24
        System.out.println(f.format(11.246)); // 11.25
        System.out.println(f.format(11.245)); // 11.24
        System.out.println(f.format(11.255)); // 11.26
        System.out.println("----------------------------------------");
        // 切换成四舍五入
        if (f instanceof DecimalFormat) {
            f.setRoundingMode(RoundingMode.HALF_UP);
            f.setMaximumFractionDigits(0);
        }
        System.out.println(f.format(4.5)); // 5
        System.out.println(f.format(5.5)); // 6

        f.setMaximumFractionDigits(1);
        System.out.println(f.format(new BigDecimal("11.45"))); // 11.5
        System.out.println(f.format(11.55)); // 11.6

        f.setMaximumFractionDigits(2);
        System.out.println(f.format(11.244)); // 11.24
        System.out.println(f.format(11.246)); // 11.25
        System.out.println(f.format(new BigDecimal("11.245"))); // 11.25
        System.out.println(f.format(11.255)); // 11.26
        System.out.println("----------------------------------------");
        BigDecimal a0 = new BigDecimal("4.5");
        a0= a0.setScale(0, RoundingMode.HALF_UP);
        System.out.println(a0); // 5

        BigDecimal b0 = new BigDecimal("5.5");
        b0 = b0.setScale(0, RoundingMode.HALF_UP);
        System.out.println(b0); // 6

        BigDecimal a1 = new BigDecimal("11.45");
        a1 = a1.setScale(1, RoundingMode.HALF_UP);
        System.out.println(a1); // 11.5

        BigDecimal b1 = new BigDecimal("11.55");
        b1 = b1.setScale(1, RoundingMode.HALF_UP);
        System.out.println(b1); // 11.6

        BigDecimal a2 = new BigDecimal("11.244");
        a2 = a2.setScale(2, RoundingMode.HALF_UP);
        System.out.println(a2); // 11.24

        BigDecimal b2 = new BigDecimal("11.246");
        b2 = b2.setScale(2, RoundingMode.HALF_UP);
        System.out.println(b2); // 11.25

        BigDecimal c2 = new BigDecimal("11.245");
        c2 = c2.setScale(2, RoundingMode.HALF_UP);
        System.out.println(c2); // 11.25

        BigDecimal d2 = new BigDecimal("11.255");
        d2 = d2.setScale(2, RoundingMode.HALF_UP);
        System.out.println(d2); // 11.26

    }

最少保留几位整数

/**
     * 最少保留几位整数
     */
    private static void keepMinInteger() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            f.setMinimumIntegerDigits(4); // 最少保留4位整数,不足补零
        }
        System.out.println(f.format(12.12)); // 0,012.12
    }

最多保留几位整数

/**
     * 最多保留几位整数
     */
    private static void keepMaxInteger() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            f.setMaximumIntegerDigits(4); // 最多保留4位整数,多余整数默认高位直接舍去
        }
        System.out.println(f.format(12345.12345)); // 2,345.123
    }

分组

/**
     * 分组
     * 默认开启, 整数部分每隔3个数字加一个逗号
     */
    private static void group() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            System.out.println(((DecimalFormat) f).getGroupingSize()); // 3, 默认整数部分 3 个数字一组
        }

        System.out.println(f.format(123456789.12345)); // 123,456,789.123

        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).setGroupingUsed(false); // 默认开启, 可手工关掉
            System.out.println(f.format(123456789.12345)); // 123,456,789.123
        }
    }

正数前缀

/**
     * 正数前缀
     */
    private static void keepPositivePrefix() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).setPositivePrefix("Plus"); // 正数前缀
        }
        System.out.println(f.format(-12.12)); // -12.12
        System.out.println(f.format(12.12)); // Plus12.12
    }

负数前缀

/**
     * 负数前缀
     */
    private static void keepNegativePrefix() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).setNegativePrefix("Minus"); // 负数前缀
        }
        System.out.println(f.format(-12.12)); // Minus12.12
        System.out.println(f.format(12.12)); // 12.12
    }

正数后缀

/**
     * 正数后缀
     */
    private static void keepPositiveSuffix() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).setPositiveSuffix("Plus"); // 正数后缀
        }
        System.out.println(f.format(-12.12)); // -12.12
        System.out.println(f.format(12.12)); // 12.12Plus
    }

负数后缀

/**
     * 负数后缀
     */
    private static void keepNegativeSuffix() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).setNegativeSuffix("Minus"); // 负数后缀
        }
        System.out.println(f.format(-12.12)); // -12.12Minus
        System.out.println(f.format(12.12)); // 12.12
    }

百分比

/**
     * 百分比
     */
    private static void percent() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).setMultiplier(100);
        }
        System.out.println(f.format(1.23)); // 123%

        NumberFormat f1 = NumberFormat.getPercentInstance();
        System.out.println(f1.format(2.34));
    }

千分比

/**
     * 千分比
     */
    private static void keepThousand() {
        NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).setMultiplier(1000);
            ((DecimalFormat) f).setPositiveSuffix("\u2030");
            ((DecimalFormat) f).setNegativeSuffix("\u2030");
        }

        System.out.println(f.format(0.12345)); // 123.45‰
        System.out.println(f.format(-0.12345)); // -123.45‰
    }

总是显示小数点

NumberFormat f = NumberFormat.getInstance();
        if (f instanceof DecimalFormat) {
            ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true); // 总是显示小数点
        }
        System.out.println(f.format(new BigDecimal("123"))); // 123.
        System.out.println(f.format(new BigDecimal("0.12"))); // 0.12

NewBie
10 声望0 粉丝

« 上一篇
Class#getMethods