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

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 的格式化了。

除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 yihaomen 于 2015-04-20 09:35 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: BigDecimal
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.