java中对BigDecimal 进行格式化的一个小工具类

摘要: java 编程,如果涉及到金额的计算,最好采用Decimal 或者BigDecimal,原因是这样不会怎么丢精度,如果用其他类型会丢精度。但用Decimal 表示的数字,最终显示在界面上的时候,还是需要格式化的,否则很难看,这里贴一个在自己项目里用到的格式化工具类,如果要其他格式,可以按例子改.

java 编程,如果涉及到金额的计算,最好采用Decimal 或者BigDecimal,原因是这样不会怎么丢精度,如果用其他类型会丢精度。但用Decimal 表示的数字,最终显示在界面上的时候,还是需要格式化的,否则很难看,这里贴一个在自己项目里用到的格式化工具类,如果要其他格式,可以按例子改.


import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.ParseException;

public class NumberFormatUtil {
	private final static DecimalFormat DF_2 = new DecimalFormat("#,##0.00");
	private final static DecimalFormat DF_0 = new DecimalFormat("#,###");
	private final static DecimalFormat DF_1 = new DecimalFormat("#,###.################################");
	
	public static final RoundingMode ROUNDING_MODE_FOR_FORMAT_UTIL =RoundingMode.HALF_UP;
	
	public static String formatTo2DecimalPlaces(BigDecimal num){
		if(num==null){
			num=BigDecimal.ZERO;
		}
		DF_2.setRoundingMode(ROUNDING_MODE_FOR_FORMAT_UTIL);
		return DF_2.format(num);
	}
	
	public static String formatToNoZero(BigDecimal num){
		if(num==null){
			num=BigDecimal.ZERO;
		}
		DF_1.setRoundingMode(ROUNDING_MODE_FOR_FORMAT_UTIL);
		return DF_1.format(num);
	}
	
	public static String formatTo0DecimalPlaces(BigDecimal num){
		if(num==null){
			num=BigDecimal.ZERO;
		}
		DF_0.setRoundingMode(ROUNDING_MODE_FOR_FORMAT_UTIL);
		return DF_0.format(num);
	}
	
	public static String formatToPatternDecimalPlaces(BigDecimal num,String pattern){
		if(num==null){
			num=BigDecimal.ZERO;
		}
		return formatToInputDecimalPlaces(num,findDecimalPlaces(pattern));
	}
	
	public static String formatToInputDecimalPlaces(BigDecimal num,int places){
		if(num==null){
			num=BigDecimal.ZERO;
		}
		DecimalFormat df= new DecimalFormat();
		df.setMaximumFractionDigits(places);
		df.setMinimumFractionDigits(places);
		df.setRoundingMode(ROUNDING_MODE_FOR_FORMAT_UTIL);
		return df.format(num);
	}
	
	public static String readValue(String value){
		return value.replaceAll(",", "");
	}
	
	public static int findDecimalPlaces(String pattern){
		int decimalPlaces=0;
		if(pattern!=null && !pattern.contains("1.0")){
			int idx=pattern.indexOf(".");
			while(idx < pattern.length()&&pattern.charAt(idx)!='1'){
				idx++;
				decimalPlaces++;
			}
		}
		return decimalPlaces;
	}
}


这样就可以实现 Decimal 或者 BigDecimal 的格式化了。

上一篇: google authenticator 一次性验证码TOTP java 代码实现
下一篇: 常用的缓存同步处理
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号