java 数字转大写_Java实现数字大写转换
packageday1;importjava.util.ArrayList;importjava.util.Collections;importjava.util.regex.Pattern;public classtest_5 {/*** 单位进位,中文默认为4位即(万、亿)*/
public static int UNIT_STEP = 4;/*** 单位*/
public static String[] CN_UNITS = new String[] { "个", "十", "百", "千", "万", "十","百", "千", "亿", "十", "百", "千", "万"};/*** 汉字*/
public static String[] CN_CHARS = new String[] { "零", "一", "二", "三", "四","五", "六", "七", "八", "九"};/*** 将阿拉伯数字转换为中文数字123=》一二三
*
*@paramsrcNum
*@return
*/
public static String getCNNum(intsrcNum) {
String desCNNum= "";if (srcNum <= 0)
desCNNum= "零";else{intsingleDigit;while (srcNum > 0) {
singleDigit= srcNum % 10;
desCNNum= String.valueOf(CN_CHARS[singleDigit]) +desCNNum;
srcNum/= 10;
}
}returndesCNNum;
}/*** 数值转换为中文字符串 如2转化为贰*/
public String cvt(longnum) {return this.cvt(num, false);
}/*** 数值转换为中文字符串(口语化)
*
*@paramnum
* 需要转换的数值
*@paramisColloquial
* 是否口语化。例如12转换为'十二'而不是'一十二'。
*@return
*/
public String cvt(String num, booleanisColloquial) {intinteger, decimal;
StringBuffer strs= new StringBuffer(32);
String[] splitNum= num.split("\\.");
integer= Integer.parseInt(splitNum[0]); //整数部分
decimal = Integer.parseInt(splitNum[1]); //小数部分
String[] result_1 =convert(integer, isColloquial);for(String str1 : result_1)
strs.append(str1);if(decimal==0){//小数部分为0时
returnstrs.toString();
}else{
String result_2=getCNNum(decimal); //例如5.32,小数部分展示三二,而不是三十二
strs.append("点");
strs.append(result_2);returnstrs.toString();
}
}/** 对于int,long类型的数据处理*/
public String cvt(long num, booleanisColloquial) {
String[] result= this.convert(num, isColloquial);
StringBuffer strs= new StringBuffer(32);for(String str : result) {
strs.append(str);
}returnstrs.toString();
}/*** 将数值转换为中文
*
*@paramnum
* 需要转换的数值
*@paramisColloquial
* 是否口语化。例如12转换为'十二'而不是'一十二'。
*@return
*/
public String[] convert(long num, booleanisColloquial) {if (num < 10) {//10以下直接返回对应汉字
return new String[] { CN_CHARS[(int) num] };//ASCII2int
}char[] chars =String.valueOf(num).toCharArray();if (chars.length > CN_UNITS.length) {//超过单位表示范围的返回空
return newString[] {};
}boolean isLastUnitStep = false;//记录上次单位进位
ArrayList cnchars = new ArrayList(chars.length * 2);//创建数组,将数字填入单位对应的位置
for (int pos = chars.length - 1; pos >= 0; pos--) {//从低位向高位循环
char ch =chars[pos];
String cnChar= CN_CHARS[ch - '0'];//ascii2int 汉字
int unitPos = chars.length - pos - 1;//对应的单位坐标
String cnUnit = CN_UNITS[unitPos];//单位
boolean isZero = (ch == '0');//是否为0
boolean isZeroLow = (pos + 1 < chars.length && chars[pos + 1] == '0');//是否低位为0
boolean isUnitStep = (unitPos >= UNIT_STEP && (unitPos % UNIT_STEP == 0));//当前位是否需要单位进位
if (isUnitStep && isLastUnitStep) {//去除相邻的上一个单位进位
int size =cnchars.size();
cnchars.remove(size- 1);if (!CN_CHARS[0].equals(cnchars.get(size - 2))) {//补0
cnchars.add(CN_CHARS[0]);
}
}if (isUnitStep || !isZero) {//单位进位(万、亿),或者非0时加上单位
cnchars.add(cnUnit);
isLastUnitStep=isUnitStep;
}if (isZero && (isZeroLow || isUnitStep)) {//当前位为0低位为0,或者当前位为0并且为单位进位时进行省略
continue;
}
cnchars.add(cnChar);
isLastUnitStep= false;
}
Collections.reverse(cnchars);//清除最后一位的0
int chSize =cnchars.size();
String chEnd= cnchars.get(chSize - 1);if (CN_CHARS[0].equals(chEnd) || CN_UNITS[0].equals(chEnd)) {
cnchars.remove(chSize- 1);
}//口语化处理
if(isColloquial) {
String chFirst= cnchars.get(0);
String chSecond= cnchars.get(1);if (chFirst.equals(CN_CHARS[1]) && chSecond.startsWith(CN_UNITS[1])) {//是否以'一'开头,紧跟'十'
cnchars.remove(0);
}
}return cnchars.toArray(newString[] {});
}public static voidmain(String[] args) {
test_5 temp= newtest_5();
String i="40.3";int t = 2234;double j = 221.23;
System.out.println(temp.cvt(i,true));//四十点三
System.out.println(temp.cvt(t,true));//二千二百三十四
System.out.println(temp.cvt(""+j,true));//二百二十一点二三
}
}
java 数字转大写_Java实现数字大写转换相关推荐
- java转大写_java实现数字转大写的方法
java实现数字转大写的方法 说明: 将数字金额转大写,如下: public class Test { /** * @param args * add by zxx ,Nov 29, 2008 */ ...
- java 数字转大写_Java把数字转换成中文大写数字
package com.chen.test; public class TestChinese { public static void main(String[] args) { System.ou ...
- java浮点型需知_java使用数字类型注意事项
1 在java中如果要求计算的数据较为准确,会使用BigDecimal类.在新建BigDecimal对象时,可以使用String或int类型的参数,不要使用float或double或者直接常量浮点型为 ...
- java 字符串首字符大写_Java字符串为大写
java 字符串首字符大写 Java String to uppercase conversion can be done using toUpperCase() method. 可以使用toUppe ...
- 猜java数字游戏大全_Java 猜数字游戏
最近学习了Java的基础知识,利用闲暇写了个猜数字游戏.由于对Java还不太熟悉,写的有些简单,尤其抛异常还不太会使用,请大家提意见.下面贴一下代码,也供以后自己修改. 1.Main类,主要是提供一个 ...
- java手机游戏吸血鬼_Java 吸血鬼数字
private static void vampireNum() { // 官方参考答案 int[] startDigit = new int[4]; int[] productDigit = new ...
- java怎么判断数字几位数_Java判断数字位数的方法总结
Java判断数字位数的方法总结 发布于 2020-7-5| 复制链接 本文给大家整理了Java判断数字位数的两种常用方法,对此有兴趣的可以跟着小妖一起学习下. 普通方法: ```java import ...
- 用Java统计姓氏个数_JAVA统计数字个数
问题描述 在1至2019中,有多少个数的数位中包含数字9? 注意,有的数中的数位中包含多个9,这个数只算一次.例如,1999这个数包含数字9,在计算只是算一个数. 答案提交 这是一道结果填空的题,你只 ...
- java中大数字表示什么_JAVA中大数字的的处理:BigInteger和BigDecimal
关键技术剖析: ² BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息. ² BigDecimal:可以精确地表示任意精度的小数,同时在运算过程 ...
最新文章
- [面向对象] ABAP中程序类如何转化成全局类
- dotween曲线运动 unity_Unity中DOTween插件的DOTweenPath轨迹移动
- 注意力机制的两种形式
- 计算机等级考试试题4,计算机等级考试二级模拟试题4
- 前端学习(2853):简单秒杀系统学习之页面事件
- Java面试题-框架篇九
- 镜像的使用(6-13)
- linux驱动基础开发3——linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解-转
- 大数据系列(hadoop) 集群环境搭建二
- 5. Browser 对象 - Screen 对象
- 【分治】寻找主元素的3种算法
- 驱动加载工具(InstDrv - V1.3中文版)
- python中cnt是什么意思_CNT是什么意思
- 蓝桥杯单片机——PWM脉宽调制(10)
- java最新2019面试题
- spark的fold函数理解
- 日积一步3(求解点到平面二次曲线的最近距离)
- 计算机组装与维护双系统安装,给你的电脑安装一个不可见的WINPE救援系统(独立启动双系统)...
- 高通SDX55平台:R8168 PHY驱动适配
- css 文本超出2行就隐藏并且显示省略号