把数字转成大写的人民币,用于发票打印

把数字转成大写的人民币,用于发票打印。

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()));
}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值