MoneyUtil.java

import java.text.DecimalFormat;
import java.text.NumberFormat;public class MoneyUtil {//总体思路://对数字进行分级处理,级长为4//对分级后的每级分别处理,处理后得到字符串相连//如:123456=12|3456//第二级:12=壹拾贰 + “万”//第一级:3456 =叁千肆百伍拾陆 + “”private double amount = 0.0D;private static final String NUM = "零壹贰叁肆伍陆柒捌玖";private static final String UNIT = "仟佰拾个";private static final String GRADEUNIT = "仟万亿兆";private static final String DOTUNIT = "角分厘";private static final int GRADE = 4;private static final String SIGN = "¥";private static final NumberFormat nf = new DecimalFormat("#0.###");public static String toBig(String str){String ret="";for (int i=0;i<str.length();i++){String temp=str.substring(i, i+1);int n=Integer.parseInt(temp);ret+=NUM.substring(n, n+1);}  return ret;  }public MoneyUtil(double amount) {this.amount = amount;}public String toBigAmt(){return toBigAmt(this.amount);}public static String toBigAmt(double amount){String amt = nf.format(amount);Double d = new Double(amount);String dotPart = ""; //取小数位String intPart = ""; //取整数位int dotPos;if ( (dotPos = amt.indexOf('.')) != -1) {intPart = amt.substring(0, dotPos);dotPart = amt.substring(dotPos + 1);}else {intPart = amt;}if(intPart.length() > 16) throw new java.lang.InternalError("The amount is too big.");String intBig = intToBig(intPart);String dotBig = dotToBig(dotPart);//以下代码稍做修改,现在是完美的代码啦!if ((dotBig.length() == 0)&&(intBig.length() != 0)) {return intBig + "元";//整}else if((dotBig.length() == 0)&&(intBig.length() == 0)){return intBig + "零元";  }else if((dotBig.length() != 0)&&(intBig.length() != 0)) {return intBig + "元" + dotBig;}else{return dotBig;  }}private static String dotToBig(String dotPart){//得到转换后的大写(小数部分)String strRet = "";for(int i=0; i<dotPart.length() && i<3; i++){int num;if((num = Integer.parseInt(dotPart.substring(i,i+1))) != 0)strRet += NUM.substring(num,num+1) + DOTUNIT.substring(i,i+1);}return strRet;}public static String intToBig(String intPart){//得到转换后的大写(整数部分)int grade; //级长String result = "";String strTmp = "";//得到当级长grade = intPart.length() / GRADE;//调整级次长度if(intPart.length() % GRADE != 0) grade += 1;//对每级数字处理for(int i = grade; i >= 1; i--){strTmp = getNowGradeVal(intPart, i);//取得当前级次数字result += getSubUnit(strTmp);//转换大写result = dropZero(result);//除零//加级次单位if( i>1 ) //末位不加单位//单位不能相连续if(getSubUnit(strTmp).equals("零零零零")){result += "零"+GRADEUNIT.substring(i - 1, i);}else{result += GRADEUNIT.substring(i - 1, i);}}return result;}private static String getNowGradeVal(String strVal,int grade){//得到当前级次的串String rst;if(strVal.length() <= grade * GRADE)rst = strVal.substring(0,strVal.length() - (grade-1)*GRADE);elserst = strVal.substring(strVal.length() - grade*GRADE,strVal.length() - (grade-1)*GRADE);return rst;}private static String getSubUnit(String strVal){//数值转换String rst = "";for(int i = 0;i< strVal.length(); i++){String s = strVal.substring(i,i+1);int num = Integer.parseInt(s);if(num == 0){//“零”作特殊处理if(i != strVal.length()) //转换后数末位不能为零rst += "零";}else{//If IntKey = 1 And i = 2 Then//“壹拾”作特殊处理//“壹拾”合理//Elserst += NUM.substring(num,num+1);//End If//追加单位if(i != strVal.length()-1 )//个位不加单位rst += UNIT.substring(i+4-strVal.length(),i+4-strVal.length()+1);}}return rst;}private static String dropZero(String strVal){//去除连继的“零”String strRst;String strBefore; //前一位置字符String strNow;    //现在位置字符strBefore = strVal.substring(0,1);strRst = strBefore;for(int i= 1; i<strVal.length(); i++) {strNow = strVal.substring(i, i+1);if(strNow.equals("零") && strBefore.equals("零"));//同时为零elsestrRst += strNow;strBefore = strNow;}//末位去零if(strRst.substring(strRst.length()-1, strRst.length()).equals("零"))strRst = strRst.substring(0,strRst.length()-1);return strRst;}public static void main(String[] args){System.out.println(MoneyUtil.toBigAmt(1000000));System.out.println(MoneyUtil.toBigAmt(0.00D));System.out.println(MoneyUtil.toBigAmt(0.60D));System.out.println(MoneyUtil.toBigAmt(00.60D));System.out.println(MoneyUtil.toBigAmt(150.2101D));System.out.println(MoneyUtil.toBigAmt(15400089666.234D));System.out.println(MoneyUtil.toBigAmt(22200004444.2347D));}
}

result:

壹佰万元
零元
陆角
陆角
壹佰伍拾元贰角壹分
壹佰伍拾肆亿零捌万玖仟陆佰陆拾陆元贰角叁分肆厘
贰佰贰拾贰亿零万肆仟肆佰肆拾肆元贰角叁分伍厘

JAVA_金额大写转换

JAVA_数字转大写相关推荐

  1. VB:将数字转换为大写中文

    方法1: 程序代码: Const strN = "零壹贰叁肆伍陆柒捌玖" Const strG = "拾佰仟万亿" Const intN = "012 ...

  2. python数字转中文大写_python 数字转换为大写

    在会计的时候,用到将数字转换为大写,也就是讲数字转为汉字 外汇出入金流程https://www.fx61.com/supportclass cnumber: cdict = {} gdict = {} ...

  3. vue金额数字转大写的方法

    // 金额数字转大写digitUppercase(price) {const fraction = ['角', '分']const digit = ['零', '壹', '贰', '叁', '肆', ...

  4. JS 实现数字转换为大写中文金额

    数字转换为大写中文金额 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆' ...

  5. php小写数字变成大写,php 小写数字怎么转大写

    php小写数字转大写的实现方法:首先创建一个PHP示例文件:然后通过"private function getChineseNumber($num, $mode = true){...}&q ...

  6. 小写转大写输出,并统计数字、大写字母、小写字母的个数

    键盘输入数字.大写字母.小写字母的混合串(以回车结束,100个以内), 将其中的小写字母转换为大写字母后显示到CRT上 data segmentmess db "please input&q ...

  7. golang: 密码中允许出现数字、大写字母、小写字母、特殊字符,但至少包含其中2种且长度在8-16之间(四种符号任意满足三种即可)

    要求: 密码中允许出现数字.大写字母.小写字母.特殊字符(.@$!%*#_~?&^),但至少包含其中2种且长度在8-16之间(四种符号任意满足三种即可) package mainimport ...

  8. php 数字转大写人民币

    /***数字转大写人民币* @param [type] $num [description]* @return [type] [description]*/ function num2rmb ($nu ...

  9. java将小写数字变成大写输出

    import java.util.Scanner; public class Cap { //方法1 将小写数字变成大写并输出switch private static void capitalNum ...

  10. C 统计数字和大写字母和小写字母的个数

    image.png 从键盘输入一行字符,分别统计其中大写字母和小写字母的个数 实例 #include <stdio.h>int main(void) {char str;int digit ...

最新文章

  1. 【FFmpeg】ffmpeg命令详解(三)高级选项
  2. multiprocessing 多进程
  3. java中 运算符
  4. HTTPS_SSL配置的步骤以及原理说明
  5. 2.HTML基本格式
  6. 【待继续研究】除了专家模型,这两大模型也被普遍应用于信用评估
  7. 文本分类从入门到精通
  8. leetcode894.AllPossibleFullBinaryTrees
  9. java判断栈中元素数目_Java数据结构与算法-栈和队列
  10. Sql JOIN 一张图说明
  11. 李志 逼哥 完整专辑网盘下载
  12. PMP认证考试情况整理
  13. 全国高级计算机职称考试试题及答案,全国职称计算机考试复习题「附答案」
  14. MySQL 日期格式化
  15. UE4蓝图基础04-变量和数组
  16. 九九乘法表打印Python
  17. 【CANdelaStudio编辑CDD】-0.3-CDD中Fault Memory里DTC Column与Autosar Dem对应关系
  18. INFOR ERP LN 创建表
  19. Notepad++ 安装 HexEditor 插件
  20. CentOS7下Mantis安装与配置

热门文章

  1. PowerDesigner书签(03)显示comment字段注释内容
  2. CSS文本溢出打点显示
  3. 重读经典:《The Craft of Research(1)》
  4. 前端入门参考:写给前端入门者的chat
  5. 关于 Swift Package Manager 的一些经验分享
  6. java中package的运用
  7. msxml3.dll 错误 '800c0008'
  8. 35 漂亮的单页网页设计
  9. 转:Beautiful Soup
  10. NNDL 作业7:第五章课后题(1×1 卷积核 | CNN BP)