public class NumberUtils {/*** 单位进位,中文默认为4位即(万、亿)*/public static int UNIT_STEP = 4;/*** 单位*/public static String[] CN_UNITS = new String[]{"个", "十", "百", "千", "万", "十","百", "千", "亿", "十", "百", "千", "万"};/*** 汉字*/public static String[] CN_CHARS = new String[]{"零", "一", "二", "三", "四","五", "六", "七", "八", "九"};/*** 将阿拉伯数字转换为中文数字123=》一二三** @param srcNum* @return*/public static String getCNNum(int srcNum) {String desCNNum = "";if (srcNum <= 0) {desCNNum = "零";} else {int singleDigit;while (srcNum > 0) {singleDigit = srcNum % 10;desCNNum = String.valueOf(CN_CHARS[singleDigit]) + desCNNum;srcNum /= 10;}}return desCNNum;}/*** 数值转换为中文字符串 如2转化为贰*/public static String cvt(long num) {return cvt(num, false);}/*** 数值转换为中文字符串(口语化)** @param num          需要转换的数值* @param isColloquial 是否口语化。例如12转换为'十二'而不是'一十二'。* @return*/public static String cvt(String num, boolean isColloquial) {int integer, decimal = 0;StringBuffer strs = new StringBuffer(32);String[] splitNum = num.split("\\.");integer = Integer.parseInt(splitNum[0]);    //整数部分if (splitNum.length > 1) {decimal = Integer.parseInt(splitNum[1]);    //小数部分}String[] result_1 = convert(integer, isColloquial);for (String str1 : result_1) {strs.append(str1);}if (decimal == 0) {//小数部分为0时return strs.toString();} else {String result_2 = getCNNum(decimal);  //例如5.32,小数部分展示三二,而不是三十二strs.append("点");strs.append(result_2);return strs.toString();}}/** 对于int,long类型的数据处理*/public static String cvt(long num, boolean isColloquial) {String[] result = convert(num, isColloquial);StringBuffer strs = new StringBuffer(32);for (String str : result) {strs.append(str);}return strs.toString();}/*** 将数值转换为中文** @param num          需要转换的数值* @param isColloquial 是否口语化。例如12转换为'十二'而不是'一十二'。* @return*/public static String[] convert(long num, boolean isColloquial) {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 new String[]{};}boolean isLastUnitStep = false;// 记录上次单位进位ArrayList<String> cnchars = new ArrayList<String>(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');// 是否为0boolean isZeroLow = (pos + 1 < chars.length && chars[pos + 1] == '0');// 是否低位为0boolean 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))) {// 补0cnchars.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);// 清除最后一位的0int 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(new String[]{});}
}

Java数字转换大写相关推荐

  1. java方法转换大写日期及人民币大写转换方式 .txt

    java方法转换大写日期及人民币大写转换方式 2012-03-02 14:38:03| 分类: java |字号 订阅 /** * 阿拉伯数字与中文数字(大小写)之间的转换 * */ import j ...

  2. java 数字转换开发票大写格式_Java数字转大写金额格式小程序代码

    今天看到可以用toCharArray()可以将字符串转换成数组,跟switch结合做个数字转中文大写金额格式的Java小程序,思路也很简单,全篇用switch.由于是字符串,无需担心输入数字过大,可以 ...

  3. java数字转换32位字符串_java字符串和数字转换工具

    java数字和字符串之间的转换工具 class="java" name="code">package com.xwtec.util; /** * 数字工具 ...

  4. java数字转换中文

    阿拉伯数字转换中文 转换结果: 23 转成 二十三 2.3 转成 二点三 import java.math.BigDecimal;/*** 数字转换中文** @author lbx*/ public ...

  5. java 数字转换成汉字_Java-String-阿拉伯数字转换成中文汉字数字

    package com.test; public class NumberUtils { private static final String[] UNITS = { "", & ...

  6. java 数字转大写_Java实现数字大写转换

    packageday1;importjava.util.ArrayList;importjava.util.Collections;importjava.util.regex.Pattern;publ ...

  7. java 数字转换开发票大写格式_Java转化数字为大写人民币

    /* * 将小写的人民币转化成大写 */ public static String convertToChineseNumber(double number) { StringBuffer chine ...

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

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

  9. java数字转大写 其他报异常_【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常...

    python科学计算数据应用(第2版) 156.4元 (需用券) 去购买 > 1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERR ...

  10. java 数字转大写 100行内搞定

    链接:https://my.oschina.net/u/3352265/blog/1859047 import java.math.BigDecimal; /****@author jack chen ...

最新文章

  1. 业界 | 计算芯片革命来临?英伟达谷歌入局紧逼英特尔
  2. 计算机审计应用功能,《计算机审计》模拟试题及答案
  3. shell 练习(13) —— 监控 httpd 进程数是否异常
  4. vue计算属性的缓存和方法调用的有什么区别?
  5. boot loader能全部用C程序编写吗
  6. GoldenGate系统二:快速搭建三方单向通信GoldenGate环境
  7. linux下能用qt5.0,qt5.0移植
  8. Android开发之微信支付获取签名小工具分享
  9. URAL 题目1297. Palindrome(后缀数组+RMQ求最长回文子串)
  10. 转hdmi_苹果本轻松接大屏,毕亚兹雷电接口转HDMI/VGA转换器评测
  11. 【CF321E】+【bzoj5311】贞鱼
  12. linux 中级 教程pdf,Linux初中级学习者指导Linux操作系统技术合集.pdf
  13. 赣州计算机教师招聘,江西省赣州市章贡区2019年招聘教师人员岗位表
  14. nc 单据模板公式
  15. 教你如何正确反编译apk
  16. 互联网乱弹之毒在何方?
  17. pdfjs使用npm_pdf在线浏览插件pdf.js使用说法举例
  18. 弘辽科技:新手卖家如何制作高点击率主图
  19. 小Y的轮回之路——攒机装机、B150装win7
  20. 数学推理相关的几个名词及LaTeX用法

热门文章

  1. python海龟交易源码_海龟交易系统的Python完全版 | RiceQuant米筐量化社区 交易策略论坛...
  2. Securing Checklists
  3. Securing Android: A Survey, Taxonomy, and Challenges --论文笔记
  4. RBAC 模型是什么?
  5. 华为Smartkit CRU和FRU工具使用教程
  6. 高速下载百度网盘资料(Tampermonkey+百度网盘直链下载助手+xdown)
  7. Java中学生管理系统(对分数健康查询与修改)
  8. WSO2流处理器相关学习(1)快速入门指南【转】
  9. 图解3GPP规范文档组织结构与编号规则
  10. 自制中文编程语言一(语言设计一)