把数字转成大写的人民币,用于发票打印。
import java.math.BigDecimal;
/**
* 把数字或字符的货币转换成人民币大写
*
* @author 250713z
*
*/
public class MoneyConvert {
public static String changeToBig(double value) {
String strPrix="";
if(value<0){
strPrix="负";
value=(-1)*value;
}
char[] hunit = { '拾', '佰', '仟' };
char[] vunit = { '万', '亿' };
char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
BigDecimal big = new BigDecimal(String.valueOf(value));
String valStr = String.valueOf(big.multiply(new BigDecimal(100))
.toBigInteger());
// 转化成字符串
String head = "0";
String rail = valStr;
if (valStr.length() > 2)
head = valStr.substring(0, valStr.length() - 2);
if (valStr.length() > 2)
rail = valStr.substring(valStr.length() - 2);
rail = String.valueOf(Integer.parseInt(rail));
// 整数部分
StringBuffer prefix = new StringBuffer("");
// 小数部分
StringBuffer suffix = new StringBuffer("");
// 处理小数点前面的数
char[] chDig = head.toCharArray();
char zero = '0';
byte zeroSerNum = 0;
for (int i = 0; i < chDig.length; i++) {
int idx = (chDig.length - i - 1) % 4;
int vidx = (chDig.length - i - 1) / 4;
if (chDig[i] == '0') {
zeroSerNum++;
if (zero == '0') {
zero = digit[0];
} else if (idx == 0 && vidx > 0 && zeroSerNum < 4) {
prefix.append(vunit[vidx - 1]);
zero = '0';
}
continue;
}
zeroSerNum = 0;
if (zero != '0') {
prefix.append(zero);
zero = '0';
}
prefix.append(digit[chDig[i] - '0']);
if (idx > 0)
prefix.append(hunit[idx - 1]);
if ((idx == 0 || idx == 1) && vidx > 0) {
prefix.append(vunit[vidx - 1]);
}
}
if (prefix.length() > 0)
prefix.append('圆');
// 处理小数点后面的数
if (("00".equals(rail) || "0".equals(rail)) && prefix.length() > 0)
suffix.append("整");
else {
if (rail.length() == 1) {
if (prefix.length() > 0)
suffix.append("零")
.append(digit[rail.charAt(0) - '0'] + "分");
else
suffix.append(digit[rail.charAt(0) - '0'] + "分");
} else if ("0".equals(String.valueOf(rail.charAt(1))))
suffix.append(digit[rail.charAt(0) - '0'] + "角");
else
suffix.append(digit[rail.charAt(0) - '0'] + "角"
+ digit[rail.charAt(1) - '0'] + "分");
}
return (strPrix + prefix.append(suffix).toString());
}
public static float getF(){
return -78.00f;
}
public static void main(String args[]) throws Exception {
float f=78;
System.out.println(changeToBig(100.5));
System.out.println(changeToBig(11.15));
System.out.println(changeToBig(12.01));
System.out.println(changeToBig(12.50));
System.out.println(changeToBig(22222.50));
System.out.println(changeToBig(1000100.00));
System.out.println(changeToBig(100010.00));
System.out.println(changeToBig(3050010.55));
System.out.println(changeToBig(300010.02));
System.out.println(changeToBig(300010.2));
System.out.println(changeToBig(300010.12));
System.out.println(changeToBig(30101010.12));
System.out.println(changeToBig(11010.12));
System.out.println(changeToBig(58.0));
System.out.println(changeToBig(121.31));
System.out.println(changeToBig(Double.parseDouble(121.31 +"f")));
System.out.println(changeToBig(getF()));
}
}