java中对BigDecimal 进行格式化的一个小工具类
By:Roy.LiuLast updated:2015-04-20
java 编程,如果涉及到金额的计算,最好采用Decimal 或者BigDecimal,原因是这样不会怎么丢精度,如果用其他类型会丢精度。但用Decimal 表示的数字,最终显示在界面上的时候,还是需要格式化的,否则很难看,这里贴一个在自己项目里用到的格式化工具类,如果要其他格式,可以按例子改.
这样就可以实现 Decimal 或者 BigDecimal 的格式化了。
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 的格式化了。
From:一号门
Next:常用的缓存同步处理
COMMENTS