JAVA学习笔记_小写数字转换成大写且带单位_金额小写转大写
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学习笔记_小写数字转换成大写且带单位_金额小写转大写相关推荐
- 小写数字转换成大写数字
前两天看到一道题,关于小写数字转换成大写的.也就是将"1023050405"这样的数字转换为"十亿二千三百零五万零四百零五". 这个是个算法问题,其它语言也是相 ...
- 如何把excel里面中文小写数字转换成阿拉伯数字
今天跟大家分享一下如何把excel里面中文小写数字转换成阿拉伯数字 1.打开要处理的Excel文件 2.将E列数据复制一份到F列中并选中 3.点击下图选项(Excel工具箱,百度即可了解详细下载安装信 ...
- 将数字转换成以万为单位显示
private String toNumber(int number) {String str = "";if (number <= 0) {str = "&quo ...
- 【剑指Offer】个人学习笔记_46_把数字翻译成字符串
目录 题目: [剑指 Offer 46. 把数字翻译成字符串](https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan- ...
- C/C++小写数字转换成大写数字
#include<stdio.h> void main() { double x,y; char *ch[]={"零","壹","贰&qu ...
- 金额数字转换成中文写法
import java.math.BigDecimal; /** * <p> * Title: 金额数字转换成中文写法 * </p> * <p> * Descrip ...
- java将大写数字转换成小写并输出
import java.util.Scanner; public class Low { //lowNumber方法将大写数字转换成小写并输出 private static void lowNumbe ...
- 中文格式_财务必会Excel技巧,将数字转换成中文的5种方式
你还在纠结如何把数字转换成中文大小写吗?下面和大家一起来学习把数字转换成中文的5种方法. 方式一:NUMBERSTRING函数 语法=NUMBERSTRING(数值,选项) 数值:被转换为中文字符串的 ...
- oracle 数字大写转换,oracle数据库使用游标实现大写数字转换成小写数字
项目遇到需求,需要将大写数字转换成小写.代码如下:declare t_zl varchar2(100); t_ts varchar2(100); t_l number; hh varchar2(100 ...
- oracle大写数字转小写,oracle数据库使用游标实现大写数字转换成小写数字
项目遇到需求,需要将大写数字转换成小写.代码如下: declare t_zl varchar2(100); t_ts varchar2(100); t_l number; hh varchar2(10 ...
最新文章
- 上海交大张拳石:漂在零丁洋里的体系,神经网络的博弈交互解释性
- 学了指针没学动态内存一切都白搭!C语言基础教程之内存管理
- (第二课)python学习之数据类型
- python中set函数是什么数据类型_阿博Python之路-详解Set数据类型
- linux c进程和线程脑图,进程和线程
- Linux函数--inet_pton / inet_ntop
- python逐个读取字符_玩转python之字符串逐个字符或逐词反转
- 基于java SSM图书管理系统简单版设计和实现
- Android中各个权限详解
- 自考----怎么说我不爱你
- Django 视图与网址
- Linux之squirrelmail小松鼠客户端搭建
- C#抓取网页数据、分析并且去除HTML标签(转载)
- 苹果计算机磁盘格式,苹果电脑上怎么进行格式化磁盘?
- 计算机之父童年的故事ppt,24计算机之父童年的故事
- python绘图设置正交坐标等距_python – 使用cartopy在其他项目中绘制投影数据
- 历年siggraph
- CAD中怎么设置CAD标注样式?CAD看图软件教程
- 学习用 JS/CSS 画一个时钟
- 电脑和打印机怎么连接