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实现数字大写转换相关推荐

  1. java转大写_java实现数字转大写的方法

    java实现数字转大写的方法 说明: 将数字金额转大写,如下: public class Test { /** * @param args * add by zxx ,Nov 29, 2008 */ ...

  2. java 数字转大写_Java把数字转换成中文大写数字

    package com.chen.test; public class TestChinese { public static void main(String[] args) { System.ou ...

  3. java浮点型需知_java使用数字类型注意事项

    1 在java中如果要求计算的数据较为准确,会使用BigDecimal类.在新建BigDecimal对象时,可以使用String或int类型的参数,不要使用float或double或者直接常量浮点型为 ...

  4. java 字符串首字符大写_Java字符串为大写

    java 字符串首字符大写 Java String to uppercase conversion can be done using toUpperCase() method. 可以使用toUppe ...

  5. 猜java数字游戏大全_Java 猜数字游戏

    最近学习了Java的基础知识,利用闲暇写了个猜数字游戏.由于对Java还不太熟悉,写的有些简单,尤其抛异常还不太会使用,请大家提意见.下面贴一下代码,也供以后自己修改. 1.Main类,主要是提供一个 ...

  6. java手机游戏吸血鬼_Java 吸血鬼数字

    private static void vampireNum() { // 官方参考答案 int[] startDigit = new int[4]; int[] productDigit = new ...

  7. java怎么判断数字几位数_Java判断数字位数的方法总结

    Java判断数字位数的方法总结 发布于 2020-7-5| 复制链接 本文给大家整理了Java判断数字位数的两种常用方法,对此有兴趣的可以跟着小妖一起学习下. 普通方法: ```java import ...

  8. 用Java统计姓氏个数_JAVA统计数字个数

    问题描述 在1至2019中,有多少个数的数位中包含数字9? 注意,有的数中的数位中包含多个9,这个数只算一次.例如,1999这个数包含数字9,在计算只是算一个数. 答案提交 这是一道结果填空的题,你只 ...

  9. java中大数字表示什么_JAVA中大数字的的处理:BigInteger和BigDecimal

    关键技术剖析: ² BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息. ² BigDecimal:可以精确地表示任意精度的小数,同时在运算过程 ...

最新文章

  1. [面向对象] ABAP中程序类如何转化成全局类
  2. dotween曲线运动 unity_Unity中DOTween插件的DOTweenPath轨迹移动
  3. 注意力机制的两种形式
  4. 计算机等级考试试题4,计算机等级考试二级模拟试题4
  5. 前端学习(2853):简单秒杀系统学习之页面事件
  6. Java面试题-框架篇九
  7. 镜像的使用(6-13)
  8. linux驱动基础开发3——linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解-转
  9. 大数据系列(hadoop) 集群环境搭建二
  10. 5. Browser 对象 - Screen 对象
  11. 【分治】寻找主元素的3种算法
  12. 驱动加载工具(InstDrv - V1.3中文版)
  13. python中cnt是什么意思_CNT是什么意思
  14. 蓝桥杯单片机——PWM脉宽调制(10)
  15. java最新2019面试题
  16. spark的fold函数理解
  17. 日积一步3(求解点到平面二次曲线的最近距离)
  18. 计算机组装与维护双系统安装,给你的电脑安装一个不可见的WINPE救援系统(独立启动双系统)...
  19. 高通SDX55平台:R8168 PHY驱动适配
  20. css 文本超出2行就隐藏并且显示省略号

热门文章

  1. uml的九种图例分析
  2. oracle cmd命令导入,oracle使用cmd命令导入数据库
  3. 语音识别(ASR)论文优选:Icassp 2022 M2MeT方案总结
  4. sketch如何在手机中预览
  5. linux环境安装部署RF+Jenkins+Git(非完整版)
  6. 基于opencv和pillow实现人脸识别系统(附demo)
  7. html中index函数,INDEX函数.doc
  8. 如何增加百度收录量和友好度
  9. 面试杂谈:数组去重和时间复杂度
  10. deepin 安装git