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;  }/*if(dotBig.length() == 0) return intBig +"元整";else return intBig + "元" + 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));}
} 

console

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

JAVA学习笔记_小写数字转换成大写且带单位_金额小写转大写相关推荐

  1. 小写数字转换成大写数字

    前两天看到一道题,关于小写数字转换成大写的.也就是将"1023050405"这样的数字转换为"十亿二千三百零五万零四百零五". 这个是个算法问题,其它语言也是相 ...

  2. 如何把excel里面中文小写数字转换成阿拉伯数字

    今天跟大家分享一下如何把excel里面中文小写数字转换成阿拉伯数字 1.打开要处理的Excel文件 2.将E列数据复制一份到F列中并选中 3.点击下图选项(Excel工具箱,百度即可了解详细下载安装信 ...

  3. 将数字转换成以万为单位显示

    private String toNumber(int number) {String str = "";if (number <= 0) {str = "&quo ...

  4. 【剑指Offer】个人学习笔记_46_把数字翻译成字符串

    目录 题目: [剑指 Offer 46. 把数字翻译成字符串](https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan- ...

  5. C/C++小写数字转换成大写数字

    #include<stdio.h> void main() { double x,y; char *ch[]={"零","壹","贰&qu ...

  6. 金额数字转换成中文写法

    import java.math.BigDecimal; /** * <p> * Title: 金额数字转换成中文写法 * </p> * <p> * Descrip ...

  7. java将大写数字转换成小写并输出

    import java.util.Scanner; public class Low { //lowNumber方法将大写数字转换成小写并输出 private static void lowNumbe ...

  8. 中文格式_财务必会Excel技巧,将数字转换成中文的5种方式

    你还在纠结如何把数字转换成中文大小写吗?下面和大家一起来学习把数字转换成中文的5种方法. 方式一:NUMBERSTRING函数 语法=NUMBERSTRING(数值,选项) 数值:被转换为中文字符串的 ...

  9. oracle 数字大写转换,oracle数据库使用游标实现大写数字转换成小写数字

    项目遇到需求,需要将大写数字转换成小写.代码如下:declare t_zl varchar2(100); t_ts varchar2(100); t_l number; hh varchar2(100 ...

  10. oracle大写数字转小写,oracle数据库使用游标实现大写数字转换成小写数字

    项目遇到需求,需要将大写数字转换成小写.代码如下: declare t_zl varchar2(100); t_ts varchar2(100); t_l number; hh varchar2(10 ...

最新文章

  1. 上海交大张拳石:漂在零丁洋里的体系,神经网络的博弈交互解释性
  2. 学了指针没学动态内存一切都白搭!C语言基础教程之内存管理
  3. (第二课)python学习之数据类型
  4. python中set函数是什么数据类型_阿博Python之路-详解Set数据类型
  5. linux c进程和线程脑图,进程和线程
  6. Linux函数--inet_pton / inet_ntop
  7. python逐个读取字符_玩转python之字符串逐个字符或逐词反转
  8. 基于java SSM图书管理系统简单版设计和实现
  9. Android中各个权限详解
  10. 自考----怎么说我不爱你
  11. Django 视图与网址
  12. Linux之squirrelmail小松鼠客户端搭建
  13. C#抓取网页数据、分析并且去除HTML标签(转载)
  14. 苹果计算机磁盘格式,苹果电脑上怎么进行格式化磁盘?
  15. 计算机之父童年的故事ppt,24计算机之父童年的故事
  16. python绘图设置正交坐标等距_python – 使用cartopy在其他项目中绘制投影数据
  17. 历年siggraph
  18. CAD中怎么设置CAD标注样式?CAD看图软件教程
  19. 学习用 JS/CSS 画一个时钟
  20. 电脑和打印机怎么连接

热门文章

  1. Deqin - 接小球游戏
  2. 修改禅道使用的数据库
  3. 【算法设计与分析】图搜索算法的应用
  4. 南阳oj STL分类练习
  5. 没有服务器认证消息,关于《跑跑卡丁车》没有服务器认证消息的问题,怎么解决?...
  6. 极速FLV合并器——合并FLV文件的好软件
  7. walsh64码 matlab,实验7 Walsh码及单用户CDMA系统直接序列扩频仿真
  8. 如何将base64码保存为图片
  9. Selenium 定位Loading元素图标,只需要简单配置下就行
  10. 怎么用计算机计算方位角,方位角计算软件