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

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

}

 

jquery金额小写转大写

/** * 数字转中文 * @param dValue * @returns */ function chineseNumber(dValue) { var maxDec = 2...
  • baidu_28678737
  • baidu_28678737
  • 2015年07月03日 14:52
  • 1952

js将数字金额转换为大写人民币

今天换算律师打官司金额,用到了小写金额转化为大写汉字的问题,这里把具体思路分析一下 1、首先判断输入数值正负问题,     2、其次有小数点部分需要处理,将数值每次乘以10进行拆分,乘10——%...
  • qq_35240823
  • qq_35240823
  • 2017年11月23日 19:43
  • 133

Qt将数字转为中文大写金额

在实现之前自己在网上找了相关资料, 没发现好的实现方法, 仿照一篇博客写能实现将整数转为大写中文数字, 但是源代码写得有些复杂且没有实现小数的转换, 索性自己改写了一下....
  • tangtaizong33
  • tangtaizong33
  • 2017年08月02日 18:25
  • 358

java 数字转换为汉语中人民币的大写

package com.yunshouhu; import java.math.BigDecimal; /** * 数字转换为汉语中人民币的大写 * http://www.cnblogs.c...
  • earbao
  • earbao
  • 2016年04月19日 19:08
  • 3010

蓝桥杯 人民币金额大写 格式转换

在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。 本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。 比如,用...
  • wr132
  • wr132
  • 2015年03月25日 16:33
  • 906

软件测试实验一,人民币大小写黑盒测试报告

引言 2 1.1 标识 2 1.2 程序概述 2 1.3 文档概述 3 引用文件 3 测试结果概述 3 3.1 对被测试软件的总体评估 3 3.2 测试环境的影响 3 ...
  • qc007119
  • qc007119
  • 2016年03月22日 11:19
  • 1474

将数字转为中文金额的大写方式(C++版)

/**   * 程序目的:   *   从命令行接收一个数,并将其转化为中文金额的大写方式(C++版)   * 例如 123.45 --> 壹佰贰拾叁元肆角伍分   * @author Lov...
  • u010944926
  • u010944926
  • 2014年03月08日 15:57
  • 3187

java实现人民币数字转换成中文

public class test {     /**      * 人民币大写单位制      */     private static HashM...
  • liuyuanqiang2010
  • liuyuanqiang2010
  • 2017年07月05日 15:37
  • 179

java实现数字金额转换成汉字大写金额

我们经常在做项目的财务报表,需要打印发票等情况时需要用到小写的财务金额要转换成汉字的大写金额,下面就是实现该功能的代码...
  • software7503
  • software7503
  • 2017年07月10日 20:21
  • 294

JAVA如何实现人民币大小写转换

本程序的作用是将人民币的小写形式转换为大写,例如:调用upper(“18.5″),将会返回字符串“壹拾捌圆伍角”。 [java] view plaincopy pack...
  • guaishushu1ss
  • guaishushu1ss
  • 2017年08月06日 10:48
  • 362
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:把数字转成大写的人民币,用于发票打印
举报原因:
原因补充:

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