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