金额转大写
import java.math.BigDecimal;
public class TestBigChar {
public static char[] characters = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒','捌', '玖' };
public static char[] units = {'元', '拾', '百', '仟' ,'万','拾', '百', '仟','亿'};
public static char[] units2 = {'角', '分'};
public static void main(String[] args) {
System.out.println(convert(30000000.84));
}
public static String convert(double d) {
//String val =String.valueOf(d);
BigDecimal bb=new BigDecimal(String.valueOf(d));
String val =bb.toString();
String convert = "";
int index = val.indexOf('.');
for (int i = 0; i < val.length(); i++) {
//处理小数点
if(i==index){
continue;
}
convert +=characters[Integer.parseInt(val.substring(i, i + 1))];
//处理整数部分
if (i < index){
int b=i;
convert += units[index -(b+1)];
}
//处理小数部分
if(i>index){
convert +=units2[i-index-1];
}
}
return convert;
}
}
public class TestBigChar {
public static char[] characters = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒','捌', '玖' };
public static char[] units = {'元', '拾', '百', '仟' ,'万','拾', '百', '仟','亿'};
public static char[] units2 = {'角', '分'};
public static void main(String[] args) {
System.out.println(convert(30000000.84));
}
public static String convert(double d) {
//String val =String.valueOf(d);
BigDecimal bb=new BigDecimal(String.valueOf(d));
String val =bb.toString();
String convert = "";
int index = val.indexOf('.');
for (int i = 0; i < val.length(); i++) {
//处理小数点
if(i==index){
continue;
}
convert +=characters[Integer.parseInt(val.substring(i, i + 1))];
//处理整数部分
if (i < index){
int b=i;
convert += units[index -(b+1)];
}
//处理小数部分
if(i>index){
convert +=units2[i-index-1];
}
}
return convert;
}
}
有一点要说明的是为什么要把double转成BigDecimal呢,这是因为当金额达到到千万时,double的tostring方法会以科学计数法的形式表示,这时程序会因无法解析E而报错,而转换为BigDecimal再tostring方法就不会以科学计数法表示了。