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

原创 2007年09月13日 20:10:00

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

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

}

 

相关文章推荐

人民币转成大写

Java code/** * 人民币转成大写 * * @param value * @return String */ public sta...

人民币转成大写

/** * 人民币转成大写 * * @param value * @return String */ public static String...
  • a287971
  • a287971
  • 2012年06月18日 23:56
  • 7151

Java人民币金额数字转换成大写

  • 2012年11月07日 14:21
  • 14KB
  • 下载

把人民币转化成大写

package cn.javase.util; public class HengTB {      /**      * 人民币转成大写      *      * @param v...
  • emjava
  • emjava
  • 2011年10月05日 15:01
  • 184

转换成大写的人民币

/**  * 将数字转换为大写RMB  * 最大13位整数部分  */ public class Trans2RMB {    /**   * 将数字转换为大写RMB   * @p...

.Net小写转换成大写的人民币详细代码

建一个名为ConvertRMB的类,代码如下 using System; using System.Data; using System.Configuration; using System...

银行金额转换小写转成大写

  • 2010年11月01日 22:16
  • 2KB
  • 下载

js 小写转成大写

function ChangeToBig(value)   {    var intFen,i;    var strArr,strCheck,strFen,strDW,strNum,strBi...

java-金额转成大写

在处理数字的时候很经常遇见的问题,将数字金额转为大写汉字。百度到的很多程序都是直接对double类型的数字进行处理。但是,这么做的话,很容易会损失精度,导致转换错误。为了保障精度,将double类型转...

金额阿拉伯小写数字转换成大写

  • 2007年06月05日 11:49
  • 11KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:把数字转成大写的人民币,用于发票打印
举报原因:
原因补充:

(最多只允许输入30个字)