使用 DecimalFormat 和 NumberFormat 处理数字的格式化显示问题(千分位、百分号等)

您所在的位置:网站首页 去掉小数点两位以后的数字是多少 使用 DecimalFormat 和 NumberFormat 处理数字的格式化显示问题(千分位、百分号等)

使用 DecimalFormat 和 NumberFormat 处理数字的格式化显示问题(千分位、百分号等)

2024-07-04 01:02| 来源: 网络整理| 查看: 265

前言

在工作当中,可能经常会遇到比如数据保留两位小数显示,去除后面多余0,按指定格式输出数据这种需求,有时隔得时间久了也难免会忘记,所以就稍作总结方便今后查看,同时最后提供一个工具类方便今后使用。NumberFormat为数值格式化的工具类,DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。

一、NumberFormat NumberFormat 是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。NumberFormat 还提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名称是什么。NumberFormat 可用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。 数值格式化 getInstance()、getNumberInstance()。返回当前默认语言环境的通用数值格式。getInstance(Locale)、getNumberInstance(Locale)。返回指定语言环境的通用数值格式。NumberFormat.setMinimumIntegerDigits(int)。设置数的整数部分所允许的最小位数。NumberFormat.setMaximumIntegerDigits(int)。设置数的整数部分所允许的最大位数。NumberFormat.setMinimumFractionDigits(int)。设置最少小数点位数,不足的位数以0补位,超出的话按实际位数输出。NumberFormat.setMaximumFractionDigits(int)。设置最多保留小数位数,不足不补0。 import java.text.NumberFormat; import java.util.Locale; public class HelloWorld { public static void main(String[] args) { numberFormat(); } private static void numberFormat() { double d = 12345.676688000; NumberFormat nf = NumberFormat.getNumberInstance(); System.out.println(nf.format(d));//12,345.677 默认只保留到小数点后三位 nf.setMinimumIntegerDigits(2); System.out.println(nf.format(d));//12,345.677 整数部分大于2位按默认最大小数位数3位输出 d = 1234.0; nf.setMaximumIntegerDigits(3); System.out.println(nf.format(d));//234 nf = NumberFormat.getInstance(); d = 12345.6766; nf.setMinimumFractionDigits(1); System.out.println(nf.format(d));//12,345.677 小数部分大于1位,按默认最大小数位数3位输出 nf.setMinimumFractionDigits(5); System.out.println(nf.format(d));//12,345.67660 不够位数补0 nf.setMaximumFractionDigits(1); System.out.println(nf.format(d));//12,345.7 nf = NumberFormat.getNumberInstance(Locale.US); d = 12345.6789; System.out.println(nf.format(d));//12,345.679 nf = NumberFormat.getNumberInstance(Locale.FRANCE); System.out.println(nf.format(d));//12 345,679 } } 货币格式化 getCurrencyInstance()。静态方法,建立一个NumberFormat类的对象并返回引用,该引用指定货币格式为系统预设的货币格式。getCurrencyInstance(Locale) 。静态方法,建立一个NumberFormat类的对象,并返回引用,该引用的货币格式由Locale指定。Locale类在java.util包中。 import java.text.NumberFormat; import java.util.Locale; public class HelloWorld { public static void main(String[] args) { currencyFormat(); } private static void currencyFormat() { //按系统预设的货币格式输出,这里是人民币 NumberFormat nf = NumberFormat.getCurrencyInstance(); System.out.println(nf.format(123.456));//¥123.46 //按指定的货币格式输出,这里是美元 //Locale locale = Locale.US; nf = NumberFormat.getCurrencyInstance(Locale.US); System.out.println(nf.format(123.456));//$123.46 } } 百分比格式化 getPercentInstance()。静态方法,创建一个NumberFormat类的对象并返回其引用。该对象指定百分比格式为系统预设格式。getPercentInstance(Locale)。静态方法,创建一个NumberFormat类的对象并返回引用。该对象的百分比格式由Locale来指定。 private static void percentFormat() { //按系统预设百分比格式输出 double d = 123.456; NumberFormat nf = NumberFormat.getPercentInstance(); System.out.println(nf.format(d));//12,346% //按指定百分比格式输出,这里是法国格式 nf = NumberFormat.getPercentInstance(Locale.FRANCE); System.out.println(nf.format(d));//12 346 % }

工具类

import java.text.DecimalFormat; import java.text.NumberFormat; public class NumberDealUtil { /** * 移除数字前面和后面冗余的0,只保留3位小数 * * @param isFormat 是否需要千位分隔符(,)这种格式输出 * @param num * @return */ public static String trim0(boolean isFormat, double num) { NumberFormat nf = NumberFormat.getInstance(); if (!isFormat) { //设置输出格式是否使用“,”分组,默认是使用的 nf.setGroupingUsed(false); } String result = nf.format(num); // return isFormat ? result : result.replace(",", ""); //用上面代码替换去除分隔符操作 return result; } /** * 移除数字前面和后面冗余的0 * * @param isFormat 是否需要千位分隔符(,)这种格式输出 * @param num * @param fractionDigit 要保留的小数位数 * @return */ public static String trim0(boolean isFormat, double num, int fractionDigit) { NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(fractionDigit); //setMaximumFractionDigits不会保留小数点和后面多余的0,不需下面正则去除 // if (result.contains(".") && result.endsWith("0")) { // result = result.replaceAll("0+?$", "");//去掉多余的0 // result = result.replaceAll("[.]$", "");//如最后一位是.则去掉 // } if (!isFormat) { //设置输出格式是否使用“,”分组,默认是使用的 nf.setGroupingUsed(false); } String result = nf.format(num); // return isFormat ? result : result.replace(",", ""); return result; } /** * 指定位数输出,不足补0 * 整数部分如果位数大于需要的位数按实际位数输出 * 小数部分如果大于需要的位数四舍五入 * * @param num * @param integerDigit 整数部分位数 * @param fractionDigit 小数部分位数 * @return */ public static String add0Format(double num, int integerDigit, int fractionDigit) { StringBuilder rule = new StringBuilder(); if (integerDigit


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3