将数字转为中文金额的大写方式(Java版)
JAVA金额数字转换成大写
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"),
cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);
+ moneyPatternCursor)); moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + 1; } String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer .indexOf(".")); cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."), cMoneyStringBuffer.length());
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"),
cMoneyStringBuffer.indexOf("零亿") + 2, HUNDRED_MILLION); } while (cMoneyStringBuffer.indexOf("零零") != -1) {
Java人民币金额数字转换成大写
import java.text.NumberFormat; import java.util.HashMap;
public class SimpleMoneyFormat { public static final String EMPTY = ""; public static final String ZERO = "零"; public static final String ONE = "壹"; public static final String TWO = "贰"; public static final String THREE = "叁"; public static final String FOUR = "肆"; public static final String FIVE = "伍"; public static final String SIX = "陆"; public static final String SEVEN = "柒"; public static final String EIGHT = "捌"; public static final String NINE = "玖"; public static final String TEN = "拾"; public static final String HUNDRED = "佰"; public static final String THOUSAND = "仟"; public static final String TEN_THOUSAND = "万"; public static final String HUNDRED_MILLION = "亿"; public static final String YUAN = "元"; public static final String JIAO = "角";
将数字转为中文金额的大写方式(Java版)
13.* 大虾海涵,呵呵。
14.*
15.* 程序的注释我尽量写得详细一点,如果觉得这个程序哪里有问题或者是哪里有改进的
16.* 地方欢迎随时跟我交流。
17.* 我的msn:********************
18.* QQ:372133556(注上为什么加我就可以了)
105.returnnewS;
106.}
107.
108./**
109.* 对传入的数进行四舍五入操作
110.* @param s String 从命令行输入的那个数
111.* @return 四舍五入后的新值
112.*/
113.privateString roundString(String s) {
121.d = (d *100+0.5) /100;
122.// 将 d 进行格式化
123.s =newjava.text.DecimalFormat("##0.000").format(d);
124.// 以小数点为界分割这个字符串
125.intindex = s.indexOf(".");
126.// 这个数的整数部分
192.s = s.substring(2);
193.// 如果用户当初输入的时候只输入了 0,则只返回一个 "零"
194.if(s.length() ==0) {
195.return"零";
196.}
197.}
198.// 字符串中存在多个'零'在一起的时候只读出一个'零',并省略多余的单位
数字换大写的java应用程序
数字换大写的java应用程序―――有趣之问十1、从键盘输入任意数字,例如:10860,然后输出其相对应的大写,如: 壹万〇捌佰陆拾圆整. 请编写一个JAVA应用程序实现它(提示:参考如下图。
)//////////////////////////////////////////////////import java.util.Scanner;/*** 键盘输入任意数字,例如:10860,然后输出其相对应的大写,如: 壹万〇捌佰陆拾圆整.*/public class ChangeNumberTest {public static void main(String[] args) {String[] shuzi = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };String[] weishu = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿","拾", "佰", "仟" , "兆"};Scanner sc = new Scanner(System.in);System.out.println("本程序是:将一个13位以下的整数金额转换成大写汉字金额表示形式。
\n\n");System.out.print("请输入数据:");String ss = sc.next();//"15012" ===>>> '1' '5' '0' '1' '2'int len = ss.length();String result = "";//n 表示这个整数的长度for ( int i = 0; i < ss.length(); i++) {int x = ss.charAt(i) - '0';int loc = len-i-1;String s1 = shuzi[x];String d1 = weishu[loc];if( x == 0 ){if( loc == 4 || loc == 8 ){result += d1; //当数字为零时且是万位或亿位时。
银行小写金额转成大写金额的java方法
Java将数字金额转换成中文大写形式import java.math.BigDecimal;import java.math.RoundingMode;public class ChineseMoneyUtils {/*** 中文数字*/final static private String[] CHINESE_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };/*** 中文数字单位*/final static private String[] CHINESE_NUMBER_UNIT = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };/*** 人民币单位*/final static private String[] CHINESE_MONEY_UNIT = { "圆", "角", "分" };public static void main(String[] args) {String chineseMoney = toChineseMoney(new BigDecimal("320"));System.out.println("chineseMoney = " + chineseMoney);}/*** @param sourceMoney 要转换的数值,最多支持到亿* @return 结果*/public static String toChineseMoney(BigDecimal sourceMoney) {if (new BigDecimal("1000000000000").compareTo(sourceMoney) <= 0&& pareTo(sourceMoney) >= 0) {throw new RuntimeException("支持转换的金额范围为0~1万亿");}StringBuilder sb = new StringBuilder();// 整数部分BigDecimal intPart = sourceMoney.setScale(0, RoundingMode.DOWN);// 小数部分BigDecimal decimalPart = sourceMoney.subtract(intPart).multiply(newBigDecimal(100)).setScale(0,RoundingMode.DOWN);// 处理整数部分圆if (pareTo(BigDecimal.ZERO) > 0) {String intPartNumberString = intPart.toPlainString();int length = intPartNumberString.length();// 统计末尾的零,末尾零不做处理int zeroCount = 0;for (int i = length - 1; i >= 0; i--) {int number = Integer.parseInt(String.valueOf(intPartNumberString.charAt(i)));if (number == 0) {zeroCount++;} else {break;}}for (int i = 0; i < length; i++) {// 如果转换到末尾0,则停止转换if (i + zeroCount == length) {break;}int number = Integer.parseInt(String.valueOf(intPartNumberString.charAt(i)));// 获取中文数字String chineseNumber = CHINESE_NUMBER[number];// 获取中文数字单位String chineseNumberUnit = CHINESE_NUMBER_UNIT[length - i - 1];sb.append(chineseNumber).append(chineseNumberUnit);}// 统计完后加上金额单位sb.append(CHINESE_MONEY_UNIT[0]);} else {sb.append(CHINESE_NUMBER[0]).append(CHINESE_MONEY_UNIT[0]);}// 处理小数部分if (pareTo(new BigDecimal(10)) >= 0) {// 角String jiao = decimalPart.toPlainString();int number = Integer.parseInt(String.valueOf(jiao.charAt(0)));if (number != 0) {String chineseNumber = CHINESE_NUMBER[number];sb.append(chineseNumber).append(CHINESE_MONEY_UNIT[1]);}// 分String fen = decimalPart.toPlainString();number = Integer.parseInt(String.valueOf(fen.charAt(1)));if (number != 0) {String chineseNumber = CHINESE_NUMBER[number];sb.append(chineseNumber).append(CHINESE_MONEY_UNIT[2]);}} else if (pareTo(BigDecimal.ZERO) > 0) {// 分String fen = decimalPart.toPlainString();int number = Integer.parseInt(String.valueOf(fen.charAt(0)));if (number != 0) {String chineseNumber = CHINESE_NUMBER[number];sb.append(chineseNumber).append(CHINESE_MONEY_UNIT[2]);}} else {sb.append("整");}return sb.toString();}}。
java实现人民币数字转大写(转)
java实现⼈民币数字转⼤写(转)希望转换出来的结果为:零元零⾓零分1234希望转换出来的结果为:壹仟贰佰叁拾肆元零⾓零分9999希望转换出来的结果为:玖仟玖佰玖拾玖元零⾓零分1234.5希望转换出来的结果为:壹仟贰佰叁拾肆元伍⾓零分1234.9希望转换出来的结果为:壹仟贰佰叁拾肆元玖⾓零分1234.56希望转换出来的结果为:壹仟贰佰叁拾肆元伍⾓陆分1234.99希望转换出来的结果为:壹仟贰佰叁拾肆元玖⾓玖分1234.994希望转换出来的结果为:壹仟贰佰叁拾肆元玖⾓玖分1234.999希望转换出来的结果为:壹仟贰佰叁拾伍元零⾓零分999999999999.999希望转换出来的结果为:数据过⼤,⽆法进⾏转换,请重新输⼊!package com.tfj.algorithm;import java.util.Scanner;public class RenMingBi {private boolean zero;String[] strHan = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };String[] moneyCount = { "", "拾", "佰", "仟" };RenMingBi() {zero = false;}private String[] divide(double digitalRmbValue) {// 处理整数long intPart = (long) (digitalRmbValue);// 处理⼩数,把⼩数转换成整数形式处理,并进⾏四舍五⼊,此时⼩数四舍五⼊之后为100的应该另外加⼀层处理long decimalPart = Math.round((double) Math.round((digitalRmbValue - intPart) * 10000) / 100);// System.out.println("整数部分为:" + intPart + "⼩数部分为:" + (digitalRmbValue - intPart));if (decimalPart == 100) {intPart += 1;}// System.out.println("四舍五⼊之后整数部分为:" + intPart + "⼩数部分为:" + decimalPart);String strIntPart = "";if (intPart == 0)strIntPart = "0";else {strIntPart = "" + intPart;}String strDecimalPart = "";if (decimalPart < 10 && decimalPart >= 0)strDecimalPart = "0" + decimalPart;else {strDecimalPart = "" + decimalPart;}// 处理输⼊为0的时候if (intPart == 0 && decimalPart == 0) {zero = true;}// System.out.println("准换为String后,整数部分为:" + strIntPart + "⼩数部分为:" + strDecimalPart);return new String[] { strIntPart, strDecimalPart };}// ⽤来转换⼩数部分private String transDecimal(String str) {if (str.equals("100") || str.equals("00")) {return "零⾓零分";} else {String strResult;char[] strRmb = new char[20];strRmb = str.toCharArray();if (strRmb[0] == '0' && strRmb[1] == '0') {strResult = "";} else {int dm = strRmb[0] - '0';int dn = strRmb[1] - '0';strResult = strHan[dm] + "⾓" + strHan[dn] + "分";}return strResult;}}// ⽤来转换整数部分private String transInt(String str) {char[] firstFourBitRmb = new char[20];firstFourBitRmb = str.toCharArray();int len = firstFourBitRmb.length;String strResult = "";for (int i = 0; i < len; i++) {/*** 这⾥开启之后会显⽰成通俗易懂的格式,例如1001,会转化为:壹仟零壹元,⽽不是:壹仟零佰零拾壹元,但我希望得到的是后⾯这种,因为发票所需显⽰的就是后⾯这种 **/// if (firstFourBitRmb[i] == '0' && i < len) {// boolean zeroFlag = false;// while (i < len && firstFourBitRmb[i] == '0') {// zeroFlag = true;// i++;// }// if (i != len && zeroFlag == true)// strResult += "零";// i--;// } else {// int m = firstFourBitRmb[i] - '0';// strResult += strHan[m] + moneyCount[len - i - 1];// }int m = firstFourBitRmb[i] - '0';strResult += strHan[m] + moneyCount[len - i - 1];}return strResult;}public String transComb() {String[] strTempRmb = new String[2];double strValue = 0D;Scanner sc = new Scanner(System.in);System.out.println("请输⼊具体⾦额,结果会精确到分:");strValue = sc.nextDouble();RenMingBi nr = new RenMingBi();strTempRmb = nr.divide(strValue);// 转换⼩数部分String result1 = nr.transDecimal(strTempRmb[1]);// 转换整数部分String result2 = "";int len = strTempRmb[0].length();if (len > 12)return "数据过⼤,⽆法进⾏转换,请重新输⼊!";else {if (len >= 9) {String strBit1 = strTempRmb[0].substring(0, len - 8);String strBit2 = strTempRmb[0].substring(len - 8, len - 4); String strBit3 = strTempRmb[0].substring(len - 4, len);String strResult1 = nr.transInt(strBit1) + "亿";String strResult2 = nr.transInt(strBit2) + "万";String strResult3 = nr.transInt(strBit3) + "元";result2 = strResult1 + strResult2 + strResult3;} else if (len >= 5) {String strBit1 = strTempRmb[0].substring(0, len - 4);String strBit2 = strTempRmb[0].substring(len - 4, len);String strResult1 = nr.transInt(strBit1) + "万";String strResult2 = nr.transInt(strBit2) + "元";result2 = strResult1 + strResult2;} else if (len >= 1) {if (nr.zero == true) {result2 = "零元";} elseresult2 = nr.transInt(strTempRmb[0]) + "元";}return result2 + result1;}}public static void main(String[] args) {RenMingBi rmb = new RenMingBi();while (true) {System.out.println(rmb.transComb());}}}。
将数字转为中文金额的大写方式Java版
将数字转为中文金额的大写方式(Java版)将数字转为中文金额的大写方式(Java版)/*** 程序目的:* 从命令行接收一个数,并将其转化为中文金额的大写方式* 例如123.45 --> 壹佰贰拾叁元肆角伍分* @author LovinChan** 看到网上有很多这样的例子程序,不过觉得很不满意。
有些程序我从命名上就觉得* 实在是不符合规范,程序里面的算法没有让人明白得很清楚的注释,读上去觉得有* 点难度,可读性不强。
而且很多程序还存在不少bug,随便一测就测出来了。
* 所以本人还是决定重新写一下这个程序,并且尽量做到消除不必要的bug。
这个程* 序我没有用什么很精妙的算法,不过用了一些Java类库中的类,像是正则表达式之类* 的东西。
由于本人对算法不怎么在行,在做转换操作的时候用的是很笨的方法。
望各位* 大虾海涵,呵呵。
** 程序的注释我尽量写得详细一点,如果觉得这个程序哪里有问题或者是哪里有改进的* 地方欢迎随时跟我交流。
* 我的msn:egg.chenlw@* QQ:543669516(注上为什么加我就可以了)* 我的blog:/egg_chen* 欢迎交流*/public class Trans2RMB {/*** 测试程序的可行性* @param args*/public static void main(String[] args) {System.out.println("\n--------将数字转换成中文金额的大写形式------------\n"); Trans2RMB t2r = new Trans2RMB();String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));// 如果转换过后是一个空串,则不输出屏幕if(!"".equals(s)) {System.out.println("转换成中文后为:" + s);;}System.out.println("\n---------------------------------------------");}/*** 从命令行接收一个数,在其中调用checkNum() 方法对其进行* 验证,并返回相应的值* @return 如果输入合法,返回输入的这个数*/private String getNum() {String s = null;System.out.println("请输入一个数字(精确到小数点后两位):");// 从命令行输入这个浮点数java.util.Scanner scanner = new java.util.Scanner(System.in);s = scanner.next();// 关闭这个Scannerscanner.close();// 判断用户输入是否合法// 若合法,返回这个值;若非法返回"0"if(this.checkNum(s)) {return s;} else {return "";}}/*** 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符* @param s String* @return 如果用户输入数据合法,返回true,否则返回false*/private boolean checkNum(String s) {// 如果用户输入的数里有非数字字符,则视为非法数据,返回falsetry {float f = Float.valueOf(s);// 如果这个数小于零则视为非法数据,返回falseif(f < 0) {System.out.println("非法数据,请检查!");return false;}else {return true;}} catch (NumberFormatException e) {System.out.println("非法数据,请检查!");return false;}}/*** 把用户输入的数以小数点为界分割开来,并调用numFormat() 方法* 进行相应的中文金额大写形式的转换* 注:传入的这个数应该是经过roundString() 方法进行了四舍五入操作的* @param s String* @return 转换好的中文金额大写形式的字符串*/private String splitNum(String s) {// 如果传入的是空串则继续返回空串if("".equals(s)) {return "";}// 以小数点为界分割这个字符串int index = s.indexOf(".");// 截取并转换这个数的整数部分String intOnly = s.substring(0, index);String part1 = this.numFormat(1, intOnly);// 截取并转换这个数的小数部分String smallOnly = s.substring(index + 1);String part2 = this.numFormat(2, smallOnly);// 把转换好了的整数部分和小数部分重新拼凑一个新的字符串String newS = part1 + part2;return newS;}/*** 对传入的数进行四舍五入操作* @param s String 从命令行输入的那个数* @return 四舍五入后的新值*/private String roundString(String s) {// 如果传入的是空串则继续返回空串if("".equals(s)) {return "";}// 将这个数转换成double 类型,并对其进行四舍五入操作double d = Double.parseDouble(s);// 此操作作用在小数点后两位上d = (d * 100 + 0.5) / 100;// 将d 进行格式化s = new java.text.DecimalFormat("##0.000").format(d);// 以小数点为界分割这个字符串int index = s.indexOf(".");// 这个数的整数部分String intOnly = s.substring(0, index);// 规定数值的最大长度只能到万亿单位,否则返回"0"if(intOnly.length() > 13) {System.out.println("输入数据过大!(整数部分最多13位!)");return "";}// 这个数的小数部分String smallOnly = s.substring(index + 1);// 如果小数部分大于两位,只截取小数点后两位if(smallOnly.length() > 2) {String roundSmall = smallOnly.substring(0, 2);// 把整数部分和新截取的小数部分重新拼凑这个字符串s = intOnly + "." + roundSmall;}return s;}/*** 把传入的数转换为中文金额大写形式* @param flag int 标志位,1 表示转换整数部分,0 表示转换小数部分* @param s String 要转换的字符串* @return 转换好的带单位的中文金额大写形式*/private String numFormat(int flag, String s) {int sLength = s.length();// 货币大写形式String bigLetter[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};// 货币单位String unit[] = {"元", "拾", "佰", "仟", "万",// 拾万位到仟万位"拾", "佰", "仟",// 亿位到万亿位"亿", "拾", "佰", "仟", "万"}; String small[] = {"分", "角"};// 用来存放转换后的新字符串String newS = "";// 逐位替换为中文大写形式for(int i = 0; i < sLength; i ++) {if(flag == 1) {// 转换整数部分为中文大写形式(带单位)newS = newS + bigLetter[s.charAt(i) - 48] + unit[sLength - i - 1];} else if(flag == 2) {// 转换小数部分(带单位)newS = newS + bigLetter[s.charAt(i) - 48] + small[sLength - i - 1];}}return newS;}/*** 把已经转换好的中文金额大写形式加以改进,清理这个字* 符串里面多余的零,让这个字符串变得更加可观* 注:传入的这个数应该是经过splitNum() 方法进行处理,这个字* 符串应该已经是用中文金额大写形式表示的* @param s String 已经转换好的字符串* @return 改进后的字符串*/private String cleanZero(String s) {// 如果传入的是空串则继续返回空串if("".equals(s)) {return "";}// 如果用户开始输入了很多0 去掉字符串前面多余的'零',使其看上去更符合习惯while(s.charAt(0) == '零') {// 将字符串中的"零" 和它对应的单位去掉s = s.substring(2);// 如果用户当初输入的时候只输入了0,则只返回一个"零"if(s.length() == 0) {return "零";}}// 字符串中存在多个'零'在一起的时候只读出一个'零',并省略多余的单位/* 由于本人对算法的研究太菜了,只能用4个正则表达式去转换了,各位大虾别介意哈... */String regex1[] = {"零仟", "零佰", "零拾"};String regex2[] = {"零亿", "零万", "零元"};String regex3[] = {"亿", "万", "元"};String regex4[] = {"零角", "零分"};// 第一轮转换把"零仟", 零佰","零拾"等字符串替换成一个"零"for(int i = 0; i < 3; i ++) {s = s.replaceAll(regex1[i], "零");}// 第二轮转换考虑"零亿","零万","零元"等情况// "亿","万","元"这些单位有些情况是不能省的,需要保留下来for(int i = 0; i < 3; i ++) {// 当第一轮转换过后有可能有很多个零叠在一起// 要把很多个重复的零变成一个零s = s.replaceAll("零零零", "零");s = s.replaceAll("零零", "零");s = s.replaceAll(regex2[i], regex3[i]);}// 第三轮转换把"零角","零分"字符串省略for(int i = 0; i < 2; i ++) {s = s.replaceAll(regex4[i], "");}// 当"万"到"亿"之间全部是"零"的时候,忽略"亿万"单位,只保留一个"亿"s = s.replaceAll("亿万", "亿");return s;}}。
Java将数字金额转为大写中文金额
Java将数字⾦额转为⼤写中⽂⾦额本⽂实例为⼤家分享了Java如何将数字⾦额转为⼤写中⽂⾦额的具体代码,供⼤家参考,具体内容如下前⾔:输⼊数字⾦额参数,运⾏程序得到其对应的⼤写中⽂⾦额;例如:输⼊— 12.56,输出— 12.56:壹拾贰元伍⾓陆分;重点来了:本⼈亲测有效。
奉上代码:/***@Title: ConvertUpMoney* @Description: 将数字⾦额转为⼤写汉字⾦额* @date: 2019年6⽉18⽇下午10:52:27*/public class ConvertUpMoney {//⼤写数字private static final String[] NUMBERS = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};// 整数部分的单位private static final String[] IUNIT = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"};//⼩数部分的单位private static final String[] DUNIT = {"⾓","分","厘"};//转成中⽂的⼤写⾦额public static String toChinese(String str) {//判断输⼊的⾦额字符串是否符合要求if (StringUtils.isBlank(str) || !str.matches("(-)?[\\d]*(.)?[\\d]*")) {System.out.println("抱歉,请输⼊数字!");return str;}if("0".equals(str) || "0.00".equals(str) || "0.0".equals(str)) {return "零元";}//判断是否存在负号"-"boolean flag = false;if(str.startsWith("-")){flag = true;str = str.replaceAll("-", "");}str = str.replaceAll(",", "");//去掉","String integerStr;//整数部分数字String decimalStr;//⼩数部分数字//初始化:分离整数部分和⼩数部分if(str.indexOf(".")>0) {integerStr = str.substring(0,str.indexOf("."));decimalStr = str.substring(str.indexOf(".")+1);}else if(str.indexOf(".")==0) {integerStr = "";decimalStr = str.substring(1);}else {integerStr = str;decimalStr = "";}//beyond超出计算能⼒,直接返回if(integerStr.length()>IUNIT.length) {System.out.println(str+":超出计算能⼒");return str;}int[] integers = toIntArray(integerStr);//整数部分数字//判断整数部分是否存在输⼊012的情况if (integers.length>1 && integers[0] == 0) {System.out.println("抱歉,请输⼊数字!");if (flag) {str = "-"+str;}return str;}boolean isWan = isWan5(integerStr);//设置万单位int[] decimals = toIntArray(decimalStr);//⼩数部分数字String result = getChineseInteger(integers,isWan)+getChineseDecimal(decimals);//返回最终的⼤写⾦额 if(flag){return "负"+result;//如果是负数,加上"负"}else{return result;}}//将字符串转为int数组private static int[] toIntArray(String number) {int[] array = new int[number.length()];for(int i = 0;i<number.length();i++) {array[i] = Integer.parseInt(number.substring(i,i+1));}return array;}//将整数部分转为⼤写的⾦额public static String getChineseInteger(int[] integers,boolean isWan) {StringBuffer chineseInteger = new StringBuffer("");int length = integers.length;if (length == 1 && integers[0] == 0) {return "";}for(int i=0;i<length;i++) {String key = "";if(integers[i] == 0) {if((length - i) == 13)//万(亿)key = IUNIT[4];else if((length - i) == 9) {//亿key = IUNIT[8];}else if((length - i) == 5 && isWan) {//万key = IUNIT[4];}else if((length - i) == 1) {//元key = IUNIT[0];}if((length - i)>1 && integers[i+1]!=0) {key += NUMBERS[0];}}chineseInteger.append(integers[i]==0?key:(NUMBERS[integers[i]]+IUNIT[length - i -1]));}return chineseInteger.toString();}//将⼩数部分转为⼤写的⾦额private static String getChineseDecimal(int[] decimals) {StringBuffer chineseDecimal = new StringBuffer("");for(int i = 0;i<decimals.length;i++) {if(i == 3) {break;}chineseDecimal.append(decimals[i]==0?"":(NUMBERS[decimals[i]]+DUNIT[i]));}return chineseDecimal.toString();}//判断当前整数部分是否已经是达到【万】private static boolean isWan5(String integerStr) {int length = integerStr.length();if(length > 4) {String subInteger = "";if(length > 8) {subInteger = integerStr.substring(length- 8,length -4);}else {subInteger = integerStr.substring(0,length - 4);}return Integer.parseInt(subInteger) > 0;}else {return false;}}//Testpublic static void main(String[] args) {String number = "12.56";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "1234567890563886.123";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "1600";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "156,0";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "-156,0";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "0.12";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "0.0";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "01.12";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "0125";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "-0125";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "sdw5655";System.out.println(number+": "+ConvertUpMoney.toChinese(number));System.out.println(null+": "+ConvertUpMoney.toChinese(null));}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
JAVA实现阿拉伯数字金额转汉语大写
JAVA实现阿拉伯数字金额转汉语大写/***将输入金额num转换为汉字大写格式*@param num输入金额(小于10000000)*@return金额的大写格式*/public String translate(double num){String[] upChinese={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖",}; String[] upChinese2={"分","角","圆","拾","佰","仟","萬","拾","佰","仟","亿","拾","佰","仟","兆"};StringBuffer result=new StringBuffer();int count=0;int zeroflag=0;boolean mantissa=false;if(num<0){ //输入值小于零return"输入金额不能为负数!";}if(num==0){ //输入值等于零return"零";}if(String.valueOf(num).indexOf('E')!=-1){ //输入值过大转为科学计数法本方法无法转换return"您输入的金额过大";}int tem=(int)(num*100);if(tem%100==0){ //金额为整时if(tem==0)return"穷鬼别来!"; //输入额为e:0.0012小于分计量单位时 result.insert(0, "整");tem=tem/100;count=2;mantissa=true;}while(tem>0){int t=(int)tem%10; //取得最后一位if(t!=0){ //最后一位不为零时if(zeroflag>=1){ //对该位前的单个或多个零位进行处理if(((!mantissa)&&count==1)){ //不是整数金额且分为为零}else if(count>2&&count-zeroflag<2){ //输入金额为400.04小数点前后都有零result.insert(1,"零");}else if(count>6&&count-zeroflag<6&&count<10){ //万位后为零且万位为零if(count-zeroflag==2){ //输入值如400000 result.insert(0,"萬");}else{result.insert(0,"萬零"); //输入值如400101 }}else if(count>10&&count-zeroflag<10){if(count-zeroflag==2){result.insert(0,"亿");}else{result.insert(0,"亿零");}}else if(((count-zeroflag)==2)){ //个位为零}else if(count>6&&count-zeroflag==6&&count<10){ //以万位开始出现零如4001000result.insert(0,"萬");}else if(count==11&&zeroflag==1){result.insert(0,"亿");}else{result.insert(0,"零");}}result.insert(0,upChinese[t]+ upChinese2[count]);zeroflag=0;}else{if(count==2){result.insert(0,upChinese2[count]); //个位为零补上"圆"字}zeroflag++;}tem/=10;System.out.println("count="+count+"---zero="+zeroflag+"----"+result.toString ());count++;if(count>20)break; }return result.toString(); }}。
java数字转中文大写金额方法
标题:Java中的数字转中文大写金额方法目录:(可根据实际内容进行排版)1. 介绍2. 实现思路3. 代码示例4. 应用场景5. 总结1. 介绍在实际开发中,有时候我们需要将数字金额转换为中文大写金额,如将123456转换为“壹拾贰万叁仟肆佰伍拾陆元整”。
本文将介绍如何使用Java来实现数字转中文大写金额的方法。
2. 实现思路实现数字转中文大写金额的方法主要涉及数字的分段处理和中文数字的映射。
对于一个给定的数字,我们首先需要将其进行分段,然后对每个段进行中文数字的映射,最后将各个段拼接起来。
具体实现思路如下:- 将输入的数字按照万、千、百、十、个位进行分段处理。
如123456分成12、345、6三个段。
- 对于每个段,逐个数字进行中文数字的映射。
如123转为“壹佰贰拾叁”。
- 最终将各个段拼接起来,加上相应的“亿”、“万”、“元”等单位,得到最终的中文大写金额。
3. 代码示例下面是一个简单的Java代码示例,用于将数字金额转换为中文大写金额:```public class NumberToChinese {// 中文数字private static final String[] CHINESE_NUMBERS = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};// 中文金额单位private static final String[] CHINESE_UNIT = {"", "拾", "佰", "仟", "万", "亿"};// 中文金额段落private static final String[] CHINESE_SECTION = {"", "万", "亿"};public static String toChineseAmount(double amount) {// 将金额转换为字符串形式String amountStr = String.valueOf(amount);// 分割整数和小数部分String[] parts = amountStr.split("\\.");int integerPart = Integer.parseInt(parts[0]);int decimalPart = Integer.parseInt(parts[1]);// 转换整数部分String integerChinese = toChineseInteger(integerPart); // 转换小数部分String decimalChinese = toChineseDecimal(decimalPart); return integerChinese + "元" + decimalChinese;}private static String toChineseInteger(int number) {StringBuilder sb = new StringBuilder();int section = 0;// 处理每个数字段while (number > 0) {int num = number 10000;if (num != 0) {sb.insert(0, CHINESE_SECTION[section]);StringBuilder sectionStr = new StringBuilder();// 处理每个数字段内的数字for (int i = 0; i < 4; i++) {int digit = num 10;if (digit != 0) {sectionStr.insert(0, CHINESE_NUMBERS[digit] +CHINESE_UNIT[i]);} else {if (sectionStr.length() > 0 sectionStr.charAt(0) != '零') {sectionStr.insert(0, "零");}}num /= 10;}sb.insert(0, sectionStr);} else {if (sb.length() > 0 sb.charAt(0) != '零') {sb.insert(0, "零");}}number /= 10000;section++;}if (sb.length() == 0) {sb.append("零");}return sb.toString();}private static String toChineseDecimal(int number) {StringBuilder sb = new StringBuilder();if (number == 0) {sb.append("整");} else {int digit1 = number / 10;int digit2 = number 10;if (digit1 != 0) {sb.append(CHINESE_NUMBERS[digit1] + "角");}if (digit2 != 0) {sb.append(CHINESE_NUMBERS[digit2] + "分");}}return sb.toString();}}```4. 应用场景数字转中文大写金额的方法通常用于财务软件、发票打印等场景中。
JAVA实现数字大写金额转换代码
例子:实现将阿拉伯数字的金额转换成中文大写金额的形式,例如:¥1011 →壹仟零壹拾壹元整。
大写数字为:零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿import java.io.*;import ng.String;public class change{public static void main(String agrs[]){//Money用于存放输入的金额数long Money=0;String Mon[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};String Mon1[]={"拾","佰","仟","万","拾万","百万","仟万","亿","拾亿","百亿","仟亿"},je[]=new String[30];//je[]数组用于存放数字金额被转换后的数字//n用于测试您是否有金额转换int n=agrs.length;if(n==0)System.out.println("请输入需要转换的金额:");//将输入的金额转化成long型的数据else{Money=Long.parseLong(agrs[]); }//bitt用于存放第几个需转换的金额数字,int bitt=0,j,k=-1,i=0;//转换过程while(Money!=0){bitt=(int)(Money%10L);//计算出每个数字对应的大写值for(j=0;j=0;i--)System.out.print(je[i]); }}}}。
java实现整数转化为中文大写金额的方法
java实现整数转化为中⽂⼤写⾦额的⽅法在⽇常⽣活中,我们经常会将阿拉伯数字转化为中⽂⼤写的情况:"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾", "佰", "仟", "万", "亿",因此⾃⼰就编写⼀个类,实现该功能的转化。
实现过程:对于这个问题的实现,我们⾸先把数字按四位⼀个拆开(符合我们读数字的习惯),然后对这四位数,做出他的读法,具体代码如下:private static String getNumberStr1000 (int num) {if (num > 9999 || num < 0) {return "";}int q = num / 1000;int b = (num / 100) % 10;int s = (num / 10) % 10;int g = num % 10;StringBuffer sb = new StringBuffer();//千if (q > 0) {sb.append(NUMBER1[q]);sb.append(NUMBER2[3]);}//百if (b > 0) {sb.append(NUMBER1[b]);sb.append(NUMBER2[2]);} else {if (q != 0) {sb.append(NUMBER2[0]);}}//⼗if (s > 0) {sb.append(NUMBER1[s]);sb.append(NUMBER2[1]);} else {if (b != 0) {sb.append(NUMBER2[0]);}}//个if (g > 0) {sb.append(NUMBER1[g]);}return sb.toString();}下⾯我们只需要在编写⼀个⽅法,实现每个四位数的读法以及对应的单位即可,具体代码如下:public static String getNumberStr(int num) {if (num < 0) {return "";}if (num == 0) {return NUMBER1[0];}int split = 10000;int y = num / (split * split);int w = (num / split) % split;int g = num % split;StringBuffer sb = new StringBuffer();//亿if (y > 0) {sb.append(getNumberStr1000(y));sb.append(NUMBER2[5]);}//万if (w > 999) {sb.append(getNumberStr1000(w));sb.append(NUMBER2[4]);} else {if (w > 0) {if (y != 0) {sb.append(NUMBER2[0]);}sb.append(getNumberStr1000(w));sb.append(NUMBER2[4]);}}//万以下if (g > 0) {if (w != 0) {if (g > 999) {sb.append(getNumberStr1000(g));} else {sb.append(NUMBER2[0]);sb.append(getNumberStr1000(g));}} else {if (y != 0) {sb.append(NUMBER2[0]);}sb.append(getNumberStr1000(g));}}return sb.toString();}完整源代码:/***@Description:*/package com.lulei.util;public class NumberUtil {private static String[] NUMBER1 = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; private static String[] NUMBER2 = {"零", "拾", "佰", "仟", "万", "亿"};/*** @param num* @return* @Author:lulei* @Description:将数字转化为⼤写*/public static String getNumberStr(int num) {if (num < 0) {return "";}if (num == 0) {return NUMBER1[0];}int split = 10000;int y = num / (split * split);int w = (num / split) % split;int g = num % split;StringBuffer sb = new StringBuffer();//亿if (y > 0) {sb.append(getNumberStr1000(y));sb.append(NUMBER2[5]);}//万if (w > 999) {sb.append(getNumberStr1000(w));sb.append(NUMBER2[4]);} else {if (w > 0) {if (y != 0) {sb.append(NUMBER2[0]);}sb.append(getNumberStr1000(w));sb.append(NUMBER2[4]);}}//万以下if (g > 0) {if (w != 0) {if (g > 999) {sb.append(getNumberStr1000(g));} else {sb.append(NUMBER2[0]);sb.append(getNumberStr1000(g));}} else {if (y != 0) {sb.append(NUMBER2[0]);}sb.append(getNumberStr1000(g));}}return sb.toString();}/*** @param num* @return* @Description:对万以下的数字进⾏⼤⼩写转化*/private static String getNumberStr1000 (int num) {if (num > 9999 || num < 0) {return "";}int q = num / 1000;int b = (num / 100) % 10;int s = (num / 10) % 10;int g = num % 10;StringBuffer sb = new StringBuffer();//千if (q > 0) {sb.append(NUMBER1[q]);sb.append(NUMBER2[3]);}//百if (b > 0) {sb.append(NUMBER1[b]);sb.append(NUMBER2[2]);} else {if (q != 0) {sb.append(NUMBER2[0]);}}//⼗if (s > 0) {sb.append(NUMBER1[s]);sb.append(NUMBER2[1]);} else {if (b != 0) {sb.append(NUMBER2[0]);}}//个if (g > 0) {sb.append(NUMBER1[g]);}return sb.toString();}public static void main(String[] args) {// TODO Auto-generated method stubint i = 1;System.out.println(i + "--" + NumberUtil.getNumberStr(i));i = 1001;System.out.println(i + "--" + NumberUtil.getNumberStr(i));i = 100101;System.out.println(i + "--" + NumberUtil.getNumberStr(i));i = 10100101;System.out.println(i + "--" + NumberUtil.getNumberStr(i));i = 1234567890;System.out.println(i + "--" + NumberUtil.getNumberStr(i)); }}测试运⾏结果:希望本⽂所述对⼤家学习java程序设计有所帮助。
java实现数字转换人民币中文大写工具
java实现数字转换⼈民币中⽂⼤写⼯具本⽂实例为⼤家分享了java实现数字转换⼈民币中⽂⼤写的具体代码,供⼤家参考,具体内容如下业务场景:1.在⼈事业务系统开发的报表打印⽂书时经常需要将⼈民币数值转换为⼤写,所以⽤java写了⼀个通⽤的⼤写转换函数。
为了更加⽅便调⽤函数的参数使⽤字符串类型。
例如:825.45 转换后:捌佰贰拾伍元肆⾓伍分2.在⼈事业务系统中经常把⽇期⽤汉字⼤写表⽰,为了⽅便调⽤函数,也是使⽤字符串类型。
例如:2018 转换后:⼆〇⼀⼋下⾯为java代码public class Data2Zh {final static private String NUMBER[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };final static private String NUMBER2[] = { "〇", "⼀", "⼆", "三", "四", "五", "六", "七", "⼋", "九" };final static private String CBit[] = { "", "拾", "佰", "仟" };/*** 将数值⼤写*/public static String capitalization(String szNum) {StringBuilder resstr = new StringBuilder();String tmpstr = szNum.trim();int sl = tmpstr.length();int sp = 0;int dotpos = tmpstr.indexOf('.');if (dotpos != -1) {while (sl > 1 && tmpstr.charAt(sl - 1) == '0')sl--;if (tmpstr.charAt(sl - 1) == '.')sl--;if (sl != tmpstr.length()) {tmpstr = tmpstr.substring(0, sl);}} elsedotpos = sl;if (sl < 1)return NUMBER[0];if (tmpstr.charAt(0) == '-') {resstr.append("负");sp = 1;}String integerNum = tmpstr.substring(sp, dotpos - sp);String decimalNum = "";if (dotpos + 1 < sl)decimalNum = tmpstr.substring(dotpos + 1);sl = integerNum.length();sp = 0;while (sp < sl && integerNum.charAt(sp) == '0')sp++;if (sp > 0)integerNum = integerNum.substring(sp);int inl = integerNum.length();if (inl > 0) {int h = (inl - 1) % 4;int j = (inl - 1) / 4 + 1;sp = 0;boolean allzero = false;boolean preallzero = false;for (; j > 0; j--) {int k = h;h = 3;boolean preiszero = allzero;allzero = true;for (; k >= 0; k--, sp++) {if (integerNum.charAt(sp) == '0')preiszero = true;else {allzero = false;if (preiszero)resstr.append("零");preiszero = false;resstr.append(NUMBER[(byte) (integerNum.charAt(sp)) - 48]).append(CBit[k]);}}// end for kif (/* j!=0 && */ j % 2 == 0) {if (!allzero)resstr.append("万");} else {if (!allzero || !preallzero) {int repyi = j / 2;for (int i = 0; i < repyi; i++)resstr.append("亿");}}preallzero = allzero;}// end for j} elseresstr.append("零");int dnl = decimalNum.length();if (dnl > 0) {resstr.append("点");for (int i = 0; i < dnl; i++) {resstr.append(NUMBER[(byte) (decimalNum.charAt(i)) - 48]);}}return resstr.toString();}/*** 获得某⼀位上的数值,如果 nBit<0 则获得⼩数点后⾯的位数*/static public char getNumByte(String szNum, int nBit) {int sl = szNum.length();int nPos = 0;while (nPos < sl && szNum.charAt(nPos) != '.')nPos++;if (nBit < 0)nPos = nPos - nBit;elsenPos = nPos - nBit - 1;if (nPos < 0 || nPos >= sl)return '0';return szNum.charAt(nPos);}public static String rmbChange(String rmb) {return capitalization((rmb.indexOf('.') >= 0 ? rmb.substring(0, rmb.indexOf('.')) : rmb)) + "元" + capitalization(String.valueOf(getNumByte(rmb, -1))) + "⾓"+ capitalization(String.valueOf(getNumByte(rmb, -2))) + "分";}/*** 仅仅是把 0~9 转换为 "〇","⼀","⼆","三","四","五","六","七","⼋","九"*/public static String changeCN(String szNum) {StringBuilder sb = new StringBuilder();String str = szNum.trim();int sl = str.length();int sp = 0;if (sl < 1)return NUMBER2[0];for (; sp < sl; sp++)if (str.charAt(sp) >= '0' && str.charAt(sp) <= '9')sb.append(NUMBER2[str.charAt(sp) - '0']);elsesb.append(str.charAt(sp));return sb.toString();}public static void main(String[] args) {System.out.println(rmbChange("825.45"));System.out.println(changeCN("2018"));}}效果图:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
Java将数字金额转成中文大写
Java将数字⾦额转成中⽂⼤写⼀个 Java 将数字⾦额转成中⽂⼤写的⼯具类,还不是很完善。
import java.util.regex.Matcher;import java.util.regex.Pattern;public class ChineseYuanUtil {private static final Pattern AMOUNT_PATTERN = pile("^(0|[1-9]\\d{0,11})\\.(\\d\\d)$"); // 不考虑分隔符的正确性 private static final char[] RMB_NUMS = "零壹贰叁肆伍陆柒捌玖".toCharArray();private static final String[] UNITS = { "元", "⾓", "分", "整" };private static final String[] U1 = { "", "拾", "佰", "仟" };private static final String[] U2 = { "", "万", "亿" };/*** 将⾦额(整数部分等于或少于 12 位,⼩数部分 2 位)转换为中⽂⼤写形式.** @param amount ⾦额数字* @return 中⽂⼤写* @throws IllegalArgumentException*/public static String convert(String amount) throws IllegalArgumentException {// 去掉分隔符amount = amount.replace(",", "");// 验证⾦额正确性if (amount.equals("0.00")) {throw new IllegalArgumentException("⾦额不能为零.");}Matcher matcher = AMOUNT_PATTERN.matcher(amount);if (!matcher.find()) {throw new IllegalArgumentException("输⼊⾦额有误.");}String integer = matcher.group(1); // 整数部分String fraction = matcher.group(2); // ⼩数部分String result = "";if (!integer.equals("0")) {result += integer2rmb(integer) + UNITS[0]; // 整数部分}if (fraction.equals("00")) {result += UNITS[3]; // 添加[整]} else if (fraction.startsWith("0") && integer.equals("0")) {result += fraction2rmb(fraction).substring(1); // 去掉分前⾯的[零]} else {result += fraction2rmb(fraction); // ⼩数部分}return result;}// 将⾦额⼩数部分转换为中⽂⼤写private static String fraction2rmb(String fraction) {char jiao = fraction.charAt(0); // ⾓char fen = fraction.charAt(1); // 分return (RMB_NUMS[jiao - '0'] + (jiao > '0' ? UNITS[1] : ""))+ (fen > '0' ? RMB_NUMS[fen - '0'] + UNITS[2] : "");}// 将⾦额整数部分转换为中⽂⼤写private static String integer2rmb(String integer) {StringBuilder buffer = new StringBuilder();// 从个位数开始转换int i, j;for (i = integer.length() - 1, j = 0; i >= 0; i--, j++) {char n = integer.charAt(i);if (n == '0') {// 当 n 是 0 且 n 的右边⼀位不是 0 时,插⼊[零]if (i < integer.length() - 1 && integer.charAt(i + 1) != '0') {buffer.append(RMB_NUMS[0]);}// 插⼊[万]或者[亿]if (j % 4 == 0) {if (i > 0 && integer.charAt(i - 1) != '0' || i > 1 && integer.charAt(i - 2) != '0'|| i > 2 && integer.charAt(i - 3) != '0') {buffer.append(U2[j / 4]);}}} else {if (j % 4 == 0) {buffer.append(U2[j / 4]); // 插⼊[万]或者[亿]}buffer.append(U1[j % 4]); // 插⼊[拾]、[佰]或[仟]buffer.append(RMB_NUMS[n - '0']); // 插⼊数字}}return buffer.reverse().toString();}}测试类:public static void main(String[] args) {System.out.println(ChineseYuanUtil.convert("16,409.02"));System.out.println(ChineseYuanUtil.convert("1,409.50"));System.out.println(ChineseYuanUtil.convert("6,007.14"));System.out.println(ChineseYuanUtil.convert("1,680.32"));System.out.println(ChineseYuanUtil.convert("325.04"));System.out.println(ChineseYuanUtil.convert("4,321.00"));System.out.println(ChineseYuanUtil.convert("0.05"));System.out.println(ChineseYuanUtil.convert("1234,5678,9012.34")); System.out.println(ChineseYuanUtil.convert("1000,1000,1000.10")); System.out.println(ChineseYuanUtil.convert("9005,9009,9009.99")); System.out.println(ChineseYuanUtil.convert("5432,0001,0001.01")); System.out.println(ChineseYuanUtil.convert("1000,0000,1110.00")); System.out.println(ChineseYuanUtil.convert("1010,0000,0001.11")); System.out.println(ChineseYuanUtil.convert("1012,0000,0000.01")); }输出结果:壹万陆仟肆佰零玖元零贰分壹仟肆佰零玖元伍⾓陆仟零柒元壹⾓肆分壹仟陆佰捌拾元叁⾓贰分叁佰贰拾伍元零肆分肆仟叁佰贰拾壹元整伍分壹仟贰佰叁拾肆亿伍仟陆佰柒拾捌万玖仟零壹拾贰元叁⾓肆分壹仟亿零壹仟万零壹仟元壹⾓玖仟零伍亿玖仟零玖万玖仟零玖元玖⾓玖分伍仟肆佰叁拾贰亿零壹万零壹元零壹分壹仟亿零壹仟壹佰壹拾元整壹仟零壹拾亿零壹元壹⾓壹分壹仟零壹拾贰亿元零壹分。
Java实现数字转换为人民币大写
Java实现数字转换为人民币大写四种简单方法//输入一个数字,将它按人民币大写输出package com.bluedot;public class Da2 {public static void main(String[] args) {//改变money的值,不超过9位数。
int money = 100100;int length = 0;char a[] = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };char b[] = { '一', '十', '百', '千', '万', '十', '百', '千', '亿', '十' };int[] c = new int[10];System.out.println(money + "元");while (money > 0) {c[length] = money % 10;// System.out.print(" 第" + length + "位:");// System.out.println(c[length]);money /= 10;length++;}// 位数对照 '一', '十', '百', '千', '万', '十', '百', '千', '亿', '十'// n: 0 1 2 3 4 5 6 7 8 9int n = length - 1;// System.out.println(n);int wanwei = 0; // 记录万位数是否都为零。
java实现将数字转换成人民币大写
java实现将数字转换成⼈民币⼤写Rmb.javapublic class Rmb{/***⼈民币的基本信息和操作*@author weinee*@version 1.0*/double number; //⼈民币的数量private String[] hanArr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };//汉字计数符号private String[] unitArr = {"", "拾", "佰", "仟"};//汉字计数单位private String[] unitArrs = {"万", "亿", "万", "兆", "万", "亿", "万", "圆"}; //顺序添加单位//private String[] unitsArr = {"万", "亿"}; //汉字计数⼤单位public Rmb(){}/***构造器初始化⼈民币数量*@param 给定的初始化⼈民币数*/public Rmb(double number){this.number = number;}/***把⼀个浮点数分解成long型部分和⼩数部分字符串,把⼈民币换成了整数,浮点数在取⼩数部分时临界值有误差*@return 返回分解后的字符串数组,第⼀个数组元素是整数部分,第⼆个是⼩数部分字符串*/public String[] divideNum(){double num = Math.round(number*100);//对number进⾏四舍五⼊取整long integerPart = (long)num; //连同⼩数点后两位取成整数,避免使⽤减法//double decimalsPart = num-integerPart;//⼩数部分,临界时产⽣了误差String decimalsPartStr;long b = integerPart % 10; //⼩数点后第⼆位long a = (integerPart/10) % 10;//⼩数点后第⼀位integerPart /= 100;if(a==0 && b==0){decimalsPartStr = null;}else{decimalsPartStr = "" + a + b;}return new String[] {String.valueOf(integerPart) , decimalsPartStr};}/***把⼀个数字字符转换成汉语的⼈民币读法*@return 返回汉语⼈民币读法的字符串形式*/public String toHanStr(){String[] results = new String[9]; //⽤来暂时存储每四位分段后的数字字符串String[] resultStrs = new String[9];//⽤来暂时存储每四位分段后转换成的⼈民币读法String result = "";//最终的转换结果String[] divideStr = divideNum(); //得到浮点数分解成的long型部分和⼩数部分字符串,第⼀个数组元素是整数部分字符串,第⼆个是⼩数部分字符串 results[8] = divideStr[1];for (int i=divideStr[0].length(), j=8; i>0&&j>0 ; i-=4,j--){try{results[j-1] = divideStr[0].substring(i-4, i);}catch(Exception e){results[j-1] = divideStr[0].substring(0, i);break;}}if(results[8] == null){resultStrs[8] = "整";}else if(results[8].charAt(1) == '0'){resultStrs[8] = hanArr[results[8].charAt(0) - 48] + "⾓"; //根据ASCII码和hanArr数组吧数字改成汉语⼤写}else{resultStrs[8] = hanArr[results[8].charAt(0) - 48] + "⾓" + hanArr[results[8].charAt(1) - 48] + "分";}for(int i=0; i<8; i++){if(results[i] != null){resultStrs[i] = "";resultStrs[i] += hanArr[results[i].charAt(0) - 48] + unitArr[results[i].length() - 1]; //根据ASCII码和数组长度选择数的单位for (int j=1; j<results[i].length(); j++ )if(results[i].charAt(j-1) == '0' && results[i].charAt(j) != '0')resultStrs[i] += "零" + hanArr[results[i].charAt(j) - 48] + unitArr[results[i].length() - 1 - j]; //根据ASCII码和数组长度选择数的单位 else if(results[i].charAt(j) != '0' )resultStrs[i] += hanArr[results[i].charAt(j) - 48] + unitArr[results[i].length() - 1 - j];}}for (int i=0; i<8; i++ ){if(resultStrs[i] != null){result += resultStrs[i] + unitArrs[i];}}result += resultStrs[8];return result;}}RmbTest.javapublic class RmbTest{public static void main(String[] args){double l;byte[] bye = new byte[50];System.out.println("请输⼊要转换的⼈民币数量:");try{System.in.read(bye);}catch(Exception e){}String s = new String(bye);l = Double.parseDouble(s);Rmb r = new Rmb(l);s = r.toHanStr();System.out.println(s);}}以上所述就是本⽂的全部内容了,希望对⼤家学习java能够有所帮助。
用java代码将金额转换成中文大写
import java.util.regex.Matcher;import java.util.regex.Pattern;public class getChinestMoney {public static void main(String[] args) {System.out.println("原金额为:154846244.20");System.out.println("转换后的金额为:");System.out.println(ChineseMoney("154846244.20"));}/*** 获得中文大写的金额的整数和小数部分* @param money* @return*/public static String ChineseMoney(String money) {String text = transChineseMoney1(money) + transChineseMoney2(money);//"Pattern.CASE_INSENSITIVE"表示不对大小写进行区分Pattern p = pile("零分",Pattern.CASE_INSENSITIVE);Matcher m = p.matcher(text);text = m.replaceAll("");return text;}/*** 截取金额的整数部分,并将其转换成中文大写格式* @return*/public static String transChineseMoney1(String s){ String ss = s;String tmpnewchar = "";//以“.”将ss分成两段,part[0]为整数部分,part[1]为小数部分 String[] part = ss.split("\\.");if (part[0].length() > 10) {// 超出可转换位数return"";}for (int i = 0; i < part[0].length(); i++) {char perchar = part[0].charAt(i);if (perchar == '0')tmpnewchar = tmpnewchar + "零";if (perchar == '1')tmpnewchar = tmpnewchar + "壹";if (perchar == '2')tmpnewchar = tmpnewchar + "贰";if (perchar == '3')tmpnewchar = tmpnewchar + "叁";if (perchar == '4')tmpnewchar = tmpnewchar + "肆";if (perchar == '5')tmpnewchar = tmpnewchar + "伍";if (perchar == '6')tmpnewchar = tmpnewchar + "陆";if (perchar == '7')tmpnewchar = tmpnewchar + "柒";if (perchar == '8')tmpnewchar = tmpnewchar + "捌";if (perchar == '9')tmpnewchar = tmpnewchar + "玖";int j = part[0].length() - i - 1;if (j == 0)tmpnewchar = tmpnewchar + "圆";if (j == 1 && perchar != 0)tmpnewchar = tmpnewchar + "拾";if (j == 2 && perchar != 0)tmpnewchar = tmpnewchar + "佰";if (j == 3 && perchar != 0)tmpnewchar = tmpnewchar + "仟";if (j == 4 && perchar != 0)tmpnewchar = tmpnewchar + "万";if (j == 5 && perchar != 0)tmpnewchar = tmpnewchar + "拾";if (j == 6 && perchar != 0)tmpnewchar = tmpnewchar + "佰";if (j == 7 && perchar != 0)tmpnewchar = tmpnewchar + "仟";if (j == 8 && perchar != 0)tmpnewchar = tmpnewchar + "亿";if (j == 9 && perchar != 0)tmpnewchar = tmpnewchar + "拾";}return tmpnewchar;}/*** 截取金额的小数部分,并将其转换成中文大写格式* @return*/public static String transChineseMoney2(String s) {String ss = s;String tmpnewchar1 = "";String[] part = ss.split("\\.");if (ss.indexOf(".") != -1) {if (part[1].length() > 2) {// MessageDialog.openInformation(null,"提示","小数点之后只能保留两位,系统将自动截段");part[1] = part[1].substring(0, 2);}for (int i = 0; i < part[1].length(); i++) {char perchar = part[1].charAt(i);// System.out.println(perchar);if (perchar == '0')tmpnewchar1 = tmpnewchar1 + "零";if (perchar == '1')tmpnewchar1 = tmpnewchar1 + "壹";if (perchar == '2')tmpnewchar1 = tmpnewchar1 + "贰";if (perchar == '3')tmpnewchar1 = tmpnewchar1 + "叁";if (perchar == '4')tmpnewchar1 = tmpnewchar1 + "肆";if (perchar == '5')tmpnewchar1 = tmpnewchar1 + "伍";if (perchar == '6')tmpnewchar1 = tmpnewchar1 + "陆";if (perchar == '7')tmpnewchar1 = tmpnewchar1 + "柒";if (perchar == '8')tmpnewchar1 = tmpnewchar1 + "捌";if (perchar == '9')tmpnewchar1 = tmpnewchar1 + "玖";if (i == 0 && perchar != 0)tmpnewchar1 = tmpnewchar1 + "角";if (i == 1 && perchar != 0)tmpnewchar1 = tmpnewchar1 + "分"; }}return tmpnewchar1;}}。
javabigdacamel金额小写转中文大写的方法
javabigdacamel金额小写转中文大写的方法问题:javabigdacamel金额小写转中文大写的方法字数:1500-2000字一、介绍在许多应用程序中,例如财务管理系统,有时需要将金额从数字转换为中文大写形式。
通过将金额转换为中文大写形式,可以提高用户体验,并确保金额显示准确。
本文将介绍一种使用Java编程语言实现金额小写转中文大写的方法。
二、分析在将金额从小写数字转换为中文大写时,我们需要遵循一些规则。
下面是一些基本的规则:1. 以“圆”为单位进行金额的转换,如100.00元可以转为壹佰元。
2. 如果金额存在小数部分,则将其转换为角和分,如13.50元可以转换为壹拾叁元伍角。
3. 金额整数部分的处理规则如下:a. 每个数字都有对应的中文大写表示,如:1 - 壹、2 - 贰、3 - 叁等。
b. 除了金额的整数部分第一个数字之外,其他数字前面都需要加上单位,如:1000可以转换为壹仟。
c. 根据金额的位数,我们还需要确定单位的使用,如:1001可以转换为壹仟零壹元。
d. 当金额位数超过一定范围时,还需要使用更大的单位,比如亿、万等。
基于以上规则,我们可以编写Java代码来实现金额小写转中文大写的功能。
三、实现首先,我们需要创建一个Java类来实现金额小写转中文大写的逻辑。
以下是一个示例类的基本结构:public class AmountConverter {private static final String[] NUMBER_MAPPING = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};TODO: 实现金额转换方法TODO: 实现数字转换方法TODO: 实现单位转换方法}上述代码中,我们定义了一个名为AmountConverter的Java类,并声明了三个空方法,用于实现金额转换、数字转换和单位转换的逻辑。
java实现数字金额转换成汉字大写金额
java实现数字⾦额转换成汉字⼤写⾦额我们经常在做项⽬的财务报表,需要打印发票等情况时需要⽤到⼩写的财务⾦额要转换成汉字的⼤写⾦额,下⾯就是实现该功能的代码import ng.Math;/***通⽤型⾦钱转换类**/public class Money {private String HanDigiStr[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍","陆", "柒", "捌", "玖" };private String HanDiviStr[] = new String[] { "", "拾", "佰", "仟", "万", "拾","佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰","仟", "万", "拾", "佰", "仟" };/*** @param NumStr 输⼊字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零* @return*/String PositiveIntegerToHanStr(String NumStr) {String RMBStr = "";boolean lastzero = false;boolean hasvalue = false; // 亿、万进位前有数值标记int len, n;len = NumStr.length();if (len > 15)return "数值过⼤!";for (int i = len - 1; i >= 0; i--) {if (NumStr.charAt(len - i - 1) == ' ')continue;n = NumStr.charAt(len - i - 1) - '0';if (n < 0 || n > 9)return "输⼊含⾮数字字符!";if (n != 0) {if (lastzero)RMBStr += HanDigiStr[0]; // 若⼲零后若跟⾮零值,只显⽰⼀个零// 除了亿万前的零不带到后⾯// if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) //// 如⼗进位前有零也不发壹⾳⽤此⾏if (!(n == 1 && (i % 4) == 1 && i == len - 1)) // ⼗进位处于第⼀位不发壹⾳RMBStr += HanDigiStr[n];RMBStr += HanDiviStr[i]; // ⾮零值后加进位,个位为空hasvalue = true; // 置万进位前有值标记} else {if ((i % 8) == 0 || ((i % 8) == 4 && hasvalue)) // 亿万之间必须有⾮零值⽅显⽰万RMBStr += HanDiviStr[i]; // “亿”或“万”}if (i % 8 == 0)hasvalue = false; // 万进位前有值标记逢亿复位lastzero = (n == 0) && (i % 4 != 0);}if (RMBStr.length() == 0)return HanDigiStr[0]; // 输⼊空字符或"0",返回"零" return RMBStr;}。
人民币小写金额转大写金额(java版)
人民币小写金额转大写金额(java版)代码说明:1.最大支持百万亿(15位整数,2位小数) ;或仟万亿(16位整数)2. 超过最大支持仟万亿(16位整数),只输出大写数字3. 整数部分越大,则小数部分输出越不精确4. 负数,则忽略负号代码:1.原代码import java.text.DecimalFormat;/**小写转大写* @author lily200825 2011-5-16* <li>最大支持<font color='red'>仟万亿</font>(16位整数,2位小数)</li>*/public class RMB {//输出日志public static volatile boolean isDebug = false;//阶值{仟万亿。
仟,佰,拾,元}public static final String[] unit = { "仟","佰","拾","万","仟","佰","拾","亿","仟","佰","拾","万","仟" ,"佰","拾","元" };// 数字表示public static final char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌','玖' };/*** 小写金额转大写金额* <li>最大支持<font color='red'>百万亿</font>(15位整数,2位小数) ;或<font color='red'>仟万亿</font>(16位整数)</li>* <li>超过最大支持<font color='red'>仟万亿</font>(16位整数),只输出大写数字</li> * <li>整数部分越大,则小数部分输出越不精确</li>* <li>负数,则忽略负号</li>* @param amount* @return 大写金额*/public static String number2UpperCase(double _amount){double amount = Math.abs(_amount);StringBuffer result = new StringBuffer();/** -------- 整数部分--------*/StringBuffer result_intStr = new StringBuffer();long num = (long)amount;// 转成大写String intStr = getUpperCase(num);int len = intStr.length();String regex_01 = "(零.)+";String regex_00 = "(零)+";String rep_str = "零";char zero = '零';if(len<=16){// ====== 仟万亿======int index = 0;for(int i=16-len ; i<16; i++){result_intStr.append(intStr.charAt(index++));//加权值result_intStr.append(unit[i]);}//加权后,未合并连续零String temp_intStr = result_intStr.toString();int temp_len = temp_intStr.length();if(isDebug){System.out.println("加权后未处理连续零,["+temp_intStr+"]。
阿拉伯数字转换成中文大写数字的java类
}
return chineseStr;
}
/**
*把一个0~9999之间的整数转换为汉字的字符串,如果是0则返回""
* @param amountPart
boolean lastIsZero = true; //在从低位往高位循环时,记录上一位数字是不是0
String chineseStr = "";
for(int i=0; i<amountStrLength; i++) {
if(temp == 0) //高位已无数据
break;
int digit = temp % 10;
lastIsZero = false;
}
temp = temp / 10;
}
return chineseStr;
}
public static void main(String[] args) {
if(args.length == 0) {
System.out.println("转换演示:");
System.out.println("-------------------------");
阿拉伯数字转换成中文大写数字的java类
public classAtoC{
public static String[] chineseDigits = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s = new java.text.DecimalFormat("##0.000").format(d);
// 以小数点为界分割这个字符串
int index = s.indexOf(".");
// 这个数的整数部分
String intOnly = s.substring(0, index);
*/
private String numFormat(int flag, String s) {
int sLength = s.length();
// 货币大写形式
String bigLetter[] = {"零", " "肆", "伍", "陆", "柒", "捌", "玖"};
// 以小数点为界分割这个字符串
int index = s.indexOf(".");
// 截取并转换这个数的整数部分
String intOnly = s.substring(0, index);
String part1 = this.numFormat(1, intOnly);
}
/**
* 从命令行接收一个数,在其中调用 checkNum() 方法对其进行
* 验证,并返回相应的值
* @return 如果输入合法,返回输入的这个数
*/
private String getNum() {
String s = null;
System.out.println("请输入一个数字(精确到小数点后两位):");
// 从命令行输入这个浮点数
java.util.Scanner scanner = new java.util.Scanner(System.in);
s = scanner.next();
// 关闭这个Scanner
scanner.close();
// 判断用户输入是否合法
// 如果这个数小于零则视为非法数据,返回 false
if(f < 0) {
System.out.println("非法数据,请检查!");
return false;
}else {
return true;
}
} catch (NumberFormatException e) {
* 把已经转换好的中文金额大写形式加以改进,清理这个字
* 符串里面多余的零,让这个字符串变得更加可观
* 注:传入的这个数应该是经过 splitNum() 方法进行处理,这个字
* 符串应该已经是用中文金额大写形式表示的
* @param s String 已经转换好的字符串
// 如果小数部分大于两位,只截取小数点后两位
if(smallOnly.length() > 2) {
String roundSmall = smallOnly.substring(0, 2);
// 把整数部分和新截取的小数部分重新拼凑这个字符串
s = intOnly + "." + roundSmall;
String regex3[] = {"亿", "万", "元"};
String regex4[] = {"零角", "零分"};
// 第一轮转换把 "零仟", 零佰","零拾"等字符串替换成一个"零"
for(int i = 0; i < 3; i ++) {
s = s.replaceAll(regex1[i], "零");
// 截取并转换这个数的小数部分
String smallOnly = s.substring(index + 1);
String part2 = this.numFormat(2, smallOnly);
// 把转换好了的整数部分和小数部分重新拼凑一个新的字符串
String newS = part1 + part2;
System.out.println("非法数据,请检查!");
return false;
}
}
/**
* 把用户输入的数以小数点为界分割开来,并调用 numFormat() 方法
* 进行相应的中文金额大写形式的转换
* 注:传入的这个数应该是经过 roundString() 方法进行了四舍五入操作的
将数字转为中文金额的大写方式(Java版)
/**
* 程序目的:
* 从命令行接收一个数,并将其转化为中文金额的大写方式
* 例如 123.45 --> 壹佰贰拾叁元肆角伍分
* @author LovinChan
*
* 看到网上有很多这样的例子程序,不过觉得很不满意。有些程序我从命名上就觉得
}
return s;
}
/**
* 把传入的数转换为中文金额大写形式
* @param flag int 标志位,1 表示转换整数部分,0 表示转换小数部分
* @param s String 要转换的字符串
* @return 转换好的带单位的中文金额大写形式
return newS;
}
/**
* 对传入的数进行四舍五入操作
* @param s String 从命令行输入的那个数
* @return 四舍五入后的新值
*/
private String roundString(String s) {
// 如果传入的是空串则继续返回空串
// 如果转换过后是一个空串,则不输出屏幕
if(!"".equals(s)) {
System.out.println("转换成中文后为:" + s);;
}
System.out.println("\n---------------------------------------------");
// 若合法,返回这个值;若非法返回 "0"
if(this.checkNum(s)) {
return s;
} else {
return "";
}
}
/**
* 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符
* @param s String
while(s.charAt(0) == '零') {
// 将字符串中的 "零" 和它对应的单位去掉
s = s.substring(2);
// 如果用户当初输入的时候只输入了 0,则只返回一个 "零"
if(s.length() == 0) {
return "零";
* 实在是不符合规范,程序里面的算法没有让人明白得很清楚的注释,读上去觉得有
* 点难度,可读性不强。而且很多程序还存在不少bug,随便一测就测出来了。
* 所以本人还是决定重新写一下这个程序,并且尽量做到消除不必要的bug。这个程
* 序我没有用什么很精妙的算法,不过用了一些Java类库中的类,像是正则表达式之类
} else if(flag == 2) {
// 转换小数部分(带单位)
newS = newS + bigLetter[s.charAt(i) - 48] + small[sLength - i - 1];
}
}
return newS;
}
/**
// 规定数值的最大长度只能到万亿单位,否则返回 "0"
if(intOnly.length() > 13) {
System.out.println("输入数据过大!(整数部分最多13位!)");
return "";
}
// 这个数的小数部分
String smallOnly = s.substring(index + 1);
* 的东西。由于本人对算法不怎么在行,在做转换操作的时候用的是很笨的方法。望各位
* 大虾海涵,呵呵。
*
* 程序的注释我尽量写得详细一点,如果觉得这个程序哪里有问题或者是哪里有改进的
* 地方欢迎随时跟我交流。
* 我的msn:egg.chenlw@
* QQ:543669516(注上为什么加我就可以了)
if("".equals(s)) {
return "";
}
// 将这个数转换成 double 类型,并对其进行四舍五入操作
double d = Double.parseDouble(s);
// 此操作作用在小数点后两位上
d = (d * 100 + 0.5) / 100;
* @return 改进后的字符串
*/
private String cleanZero(String s) {
// 如果传入的是空串则继续返回空串
if("".equals(s)) {