回答(3)
我给你贴一个我以前写的东东吧,也是把数字转成大写的人民币,用于发票打印。
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()));
}
}