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

  • 写的不是很完善,仅供参考!还望各大佬多多指点!下面直接上代码:
package demo;import java.math.BigDecimal;
import java.util.Scanner;public class MoneyToCN2 {private static final String CNSUM[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};private static final String SMALLSUM[] = {"分","角"};private static final String MIDSUM[] = {"","拾","佰","仟"};private static final String BIGSUM[] = {"","万 ","亿 "};private static final String YUAN = "圆";private static final String YUANZHENG = "圆整";private static final String LINGYUANZHENG = "零圆整";/*** 默认精确到小数点后两位*/private static final int PRECISION = 2;/*** 阿拉伯数字类型的金额 转换为 汉字大写金额类型* @param strMoney 输入后经过四舍五入的金额(保留两位小数,保留位数可更改)* @return 汉字大写金额*/public static String toCN(String strMoney){//用于接收转换了的汉字大写金额StringBuffer sb = new StringBuffer();String str[] = strMoney.split("\\.");  //根据小数点将金额分成两部分String strLeft = str[0];               //金额的整数部分String strRight = str[1];              //金额的小数部分/*** 小数部分是否为零的情况*/if(Integer.parseInt(strRight)!=0){//小数部分不为零,先读小数部分的角、分情况int fen = Integer.parseInt(strRight.substring(1));int jiao = Integer.parseInt(strRight.substring(0,1));if(fen != 0){sb.insert(0,  SMALLSUM[0]);sb.insert(0, toUpperNumber(fen));}if(jiao != 0){sb.insert(0,  SMALLSUM[1]);sb.insert(0, toUpperNumber(jiao));}//如果整数部分不为零,先将“圆”添加上去if(Long.parseLong(strLeft)!=0){sb.insert(0, YUAN+" ");}}else{//小数部分为零,小数后面的部分忽略不读,即均为   “圆整” 情况sb.append(YUANZHENG);//如果整数部分也为零,那就是“零圆整”  0.00if(Long.parseLong(strLeft)==0){return LINGYUANZHENG;}}int leftLength = strLeft.length();    //整数部分的位数if(leftLength <= 4){//金额不超过上千的话MidToUpper(strLeft, sb);return sb.toString();}else{//金额上万起步的话//将整数部分的金额拆成4个长度为一组的数,第一组单位“”,第二组单位“万”,第三组单位“亿”//到底要分成几组?fenzu<=3int fenzu = 0;if(leftLength%4!=0){fenzu = leftLength/4+1;}else{fenzu = leftLength/4;}//整数部分拆分出来的小组都装进leftMoney数组中String leftMoney[] = new String[fenzu];//将左边的整数拆分成最多四位的数组for(int i=0; i<fenzu; i++){int indexBegin = leftLength-4*(i+1);    //开始切割的点//从后往前拆分if(indexBegin>0){leftMoney[i] = strLeft.substring(indexBegin, leftLength-4*i);}else{//indexBegin≤0,即将要切分的字符串已经不足4位leftMoney[i] = strLeft.substring(0, leftLength-4*i);}}//j<=2 进行小组阿拉伯金额转换成大写汉字金额for(int j=0; j<leftMoney.length; j++){if(!leftMoney[j].equals("0000")){sb.insert(0, BIGSUM[j]);}MidToUpper(leftMoney[j],sb);}return sb.toString();}}/*** 将最多四位的金额转换成十百千的大写金额     如4181 -->肆仟壹佰捌拾壹* @param str 整数金额的字符串形式(最高四位数)* @param sb 转换后的大写金额* @return 返回大写金额*/public static String MidToUpper(String str, StringBuffer sb){if(str == null || str.trim().length() == 0){return "";}int strLength = str.length();for(int i=0; i<strLength; i++){int sum = Integer.parseInt(str.substring(strLength-i-1,strLength-i));if(sum!=0){sb.insert(0, MIDSUM[i]);sb.insert(0, toUpperNumber(sum));}}return sb.toString();}/*** 阿拉伯数字转换成汉字大写* @param num 阿拉伯数字 1~9* @return 返回汉字大写 壹~玖*/public static String toUpperNumber(int num){if(num>=0 && num<=9){return CNSUM[num];}return "";}public static void main(String[] args) {while(true){System.out.print("1.请输入最高整数为12位的金额:");BigDecimal money = new Scanner(System.in).nextBigDecimal();String strMoney = money.setScale(PRECISION, BigDecimal.ROUND_HALF_UP).toString();System.out.println("2.输入的金额保留两位小数后为:" + strMoney);if(strMoney.length()>15){System.out.println("3.抱歉,本小宝无法转换超过 上千亿 的金额!");}else{System.out.println("3.将其转换成汉字大写金额后为:" + toCN(strMoney));}System.out.println();}}}

其他版本:

package demo;/*** 数字货币转换成汉字大写人民币 ¥100,203.20 --→ 拾万零贰佰零弎元贰角* * @author LaoYiPing* */
public class MoneyToCN {private static final String[] NUMBERS = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };private static final String[] BIG_POS = { "", "万", "亿" };private static final String[] SMALL_POS = { "", "拾", "佰", "仟" };private static final String[] UNITS = { "角", "分", "厘" };private static final String YUAN = "圆";private static final String YUAN_ZHENG = "圆整";private static final String[] SMALL_O = { "零仟", "零佰", "零拾" };private static final String[] BIG_O = { "零亿", "零万", "零圆" };private static final String[] BIG_T = { "亿", "万", "圆" };private static final String BILL = "亿";private static final String ZERO = "零";private static final String DOUBLE_ZERO = "零零";public static void main(String[] args) {System.out.println(toCurrency("100000000001.00"));}public static String toCurrency(String d) {if (d == null) {return "";}String s = null;String high = null;String low = null;d = d.trim();d = d.replaceAll("\\s+", "");if (d.contains(".")) {high = d.substring(0, d.indexOf("."));low = d.substring(d.indexOf(".") + 1);} else {high = d;}high = toHigh(high);low = toLow(low);if (!isEmpty(low) && !isEmpty(high)) {s = high + YUAN + low;} else if (!isEmpty(high) && isEmpty(low)) {s = high + YUAN_ZHENG;} else if (isEmpty(high) && !isEmpty(low)) {while (true) {if (low.startsWith(NUMBERS[0])) {low = low.substring(2);} else {break;}}s = low;}return s;}private static String toHigh(String high) {if (high == null) {return null;}high = high.trim();if (high.length() < 10 && Integer.parseInt(high) == 0) {return null;}StringBuffer data = new StringBuffer(high);//everse()方法表示的是将一个输入流倒叙输出。data = data.reverse();high = data.toString();boolean b = false;boolean m = false;boolean f = false;StringBuffer rs = new StringBuffer();if (high.length() > 8) {String[] billions = getBillions(high);for (int i = 0; i < billions.length; i++) {if (isEmpty(billions[i])) {break;}if (i > 0) {b = true;}if (b) {rs.append(BILL);}if (m && f) {rs.append(BILL);}String[] millions = getMillions(billions[i]);if (millions != null) {for (int j = 0; j < millions.length; j++) {if (isEmpty(millions[j])) {break;}if (b && j > 0) {m = true;}if (Integer.parseInt(millions[j]) == 0) {f = false;continue;} else {f = true;}if (b && m) {rs.append(BILL);}rs.append(BIG_POS[j]);for (int n = 0; n < millions[j].length(); n++) {rs.append(SMALL_POS[n]).append(NUMBERS[Integer.parseInt(millions[j].charAt(n) + "")]);}}} else {for (int n = 0; n < billions[i].length(); n++) {rs.append(SMALL_POS[n]).append(NUMBERS[Integer.parseInt(billions[i].charAt(n)+ "")]);}}}} else if (high.length() > 4) {String[] millions = getMillions(high);for (int j = 0; j < millions.length; j++) {if (isEmpty(millions[j])) {break;}rs.append(BIG_POS[j]);for (int n = 0; n < millions[j].length(); n++) {rs.append(SMALL_POS[n]).append(NUMBERS[Integer.parseInt(millions[j].charAt(n) + "")]);}}} else {for (int n = 0; n < high.length(); n++) {rs.append(SMALL_POS[n]).append(NUMBERS[Integer.parseInt(high.charAt(n) + "")]);}}rs = rs.reverse();return getResult(rs.toString());}private static String getResult(String s) {int l = s.length();if (s == null) {return null;}for (int i = 0; i < SMALL_O.length; i++) {s = s.replaceAll(SMALL_O[i], ZERO);}s = s.replaceAll(DOUBLE_ZERO, ZERO);for (int i = 0; i < BIG_O.length; i++) {s = s.replaceAll(BIG_O[i], BIG_T[i]);}if (l != s.length()) {s = getResult(s);}return s;}private static String[] getMillions(String high) {if (high.length() > 4) {int l = high.length() / 4 + 1;String[] billions = new String[l];int index = 0;int st = 0;int en = 4;while (true) {if (high.length() > 4) {billions[index] = high.substring(st, en);high = high.substring(en);} else {billions[index] = high;break;}index++;}return billions;}return null;}private static boolean isEmpty(String s) {return s == null || "".equals(s.trim());}private static String[] getBillions(String high) {if (high.length() > 8) {int l = high.length() / 8 + 1;String[] billions = new String[l];int index = 0;int st = 0;int en = 8;while (true) {if (high.length() > 8) {billions[index] = high.substring(st, en);high = high.substring(en);} else {billions[index] = high;break;}index++;}return billions;}return null;}private static String toLow(String low) {if (low == null) {return null;}StringBuffer rs = new StringBuffer();for (int i = 0; i < low.length(); i++) {rs.append(NUMBERS[Integer.parseInt(low.charAt(i) + "")]).append(UNITS[i]);}return rs.toString();}
}

Java 金额转换 阿拉伯数字金额转换成汉字大写金额相关推荐

  1. win7计算机名改成大写,图文解读win7系统excel数字小写金额转换成汉字大写金额的措施...

    有很多网友在使用电脑的过程总难免会遇到win7系统excel数字小写金额转换成汉字大写金额的情况.针对win7系统excel数字小写金额转换成汉字大写金额的问题,我给大家整理总结了详细的解决步骤.近日 ...

  2. win7计算机名改成大写,Win7系统下excel数字小写金额怎么转换成汉字大写金额

    很多 第一种:设置单元格格式 在单元格中输入想要变成大写的数字之后,按Ctrl+1调出单元格格式设置对话框,在分类选择特殊类型为中文大写数字,最后再单击确定按钮即可看到自己原本的小写数字变成大写了: ...

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

    我们经常在做项目的财务报表,需要打印发票等情况时需要用到小写的财务金额要转换成汉字的大写金额,下面就是实现该功能的代码 import java.lang.Math; /** *通用型金钱转换类 * * ...

  4. js 文字金额转换成汉字大写金额

    最近在写项目时 经常出现输入数字金额 转换为汉字大写金额的需求 今天用js 简单封装一个方法. 上代码: <!DOCTYPE html> <html lang="en&qu ...

  5. Java数字金额转化成汉字大写金额

    import java.math.BigDecimal;/*** Utils - 金额转为大写汉字*/ public final class NumberToCNUtils {/**汉语中数字大写*/ ...

  6. 【Java】将阿拉伯数字金额转化为中文大写金额表示

    今天老师即兴布置了一个作业,将阿拉伯数字金额转化为中文大写金额表示,假设数字上限为小于10亿,可以支持2位小数,如: 100000001--壹亿零壹元整 100100011--壹亿零壹拾万零壹拾壹元整 ...

  7. java int类型 BigDecimal类型转成汉字金额大写

    import java.math.BigDecimal;public class CurrencyUtil {public CurrencyUtil() {}public static String ...

  8. 《读九章算术学Python》如何用Python编程实现阿拉伯数字转换成汉字数字?

    第6章 数量转换 Python编程基础 字典 字符串操作 if-elif-else语句 递归 前面的输入和输出都是阿拉伯数字,这一章我们来看一下如何实现阿拉伯数字和汉字数字之间的相互转换. 6.1 阿 ...

  9. java数字金额转换成汉字大写

    java数字转换成汉字大写.数字转发票上的人民币大写 1.调用方法 NumToCN.number2CNMontrayUnit(zjJE): 2.转换类 import java.math.BigDeci ...

  10. 人民币金额由阿拉伯数值转换成汉字大写数值的函数

    分成四个步骤: 1.数字的转化.阿拉伯数字转换为汉字大写字符 2.整数部分的转化. 分节:四位一组,从个位开始分节 每节转化为汉字大写数值:比如"1234"转化成 "壹仟 ...

最新文章

  1. 信息瓶颈提出者Naftali Tishby生前指导,129页博士论文「神经网络中的信息流」公布...
  2. git 拉取远端仓库_git 从远程仓库拉取代码
  3. 多个公证员提高网络吞吐量
  4. python基础学习1-内置函数
  5. Python学习总结之四 -- 这就是Python的字典
  6. keil5怎么配置程序风格_开发微信小程序怎么配置域名?
  7. UI设计优秀可临摹素材|网页设计头部技巧
  8. 字体编辑器_Mac系统常见的Birdfont字体编辑器
  9. 机器学习:用梯度下降法实现线性回归
  10. linux简单的操作命令
  11. 在Ubuntu上使用apt-get安装MySQL+安全优化
  12. paip.css的覆盖
  13. vs2019番茄助手 附安装教程
  14. asterisk的sip.conf配置
  15. tkinter学习04
  16. Base64对图片进行编码解码
  17. 理性看待 数据分析师 Hot!
  18. linux操作系统未正常启动提示Entering emergency mode. Exit the shell to continue
  19. java游戏西游孙悟空_玩了这本《西游冒险手册》,我才真正理解了孙悟空
  20. 把Kingston优盘做成USB-CDROM启动盘

热门文章

  1. OriginPro 绘制柱状图(特别是用于对比实验时)
  2. 亚马逊测评账号关联因素有哪些?
  3. java开花_那是花开-javaweb开发-51CTO博客
  4. 那些简历造假拿 Offer 的程序员,后来都怎样了?
  5. YouTube深度学习视频推荐系统
  6. linkis标准版安装教程
  7. 情感读本杂志情感读本杂志社情感读本编辑部2022年第23期目录
  8. Eplan PLC连接点-两两相连接方法
  9. 学习能力篇:“拼图式”学习法
  10. word无法创建工作文件请检查临时环境变量