利用数组与map的数据结构进行中文数字与数字之间的互相转换

public class NumberUtil {private NumberUtil() { }private static final char[] CN_NUM = {'零', '一', '二', '三', '四','五','六','七','八','九'};private static final char[] CN_UNIT = {' ', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千'};private static final String CN_NEGATIVE = "负";private static final String CN_POINT = "点";private static final String [] CN_UNIT_SYMBOL = {"十", "百", "千", "万","亿"};private static  Map<Character,String> NUM_MAP = null;static {Map<Character,String> map = new HashMap<>();map.put('零',"0");map.put('一',"1");map.put('二',"2");map.put('三',"3");map.put('四',"4");map.put('五',"5");map.put('六',"6");map.put('七',"7");map.put('八',"8");map.put('九',"9");map.put('点',".");map.put('负',"-");NUM_MAP = map;}/***  @param bigDecimalNum*  @return 中文数字*/public static String bigDecimalChineseNum(BigDecimal bigDecimalNum) {if (bigDecimalNum == null) {return "零";}StringBuffer sb = new StringBuffer();//将小数点后面的零给去除String numStr = bigDecimalNum.abs().stripTrailingZeros().toPlainString();String[] split = numStr.split("\\.");String integerStr = intChineseNum(Integer.parseInt(split[0]));sb.append(integerStr);//如果传入的数有小数,则进行切割,将整数与小数部分分离if (split.length == 2) {//有小数部分sb.append(CN_POINT);String decimalStr = split[1];char[] chars = decimalStr.toCharArray();for (int i = 0; i < chars.length; i++) {sb.append(CN_NUM[Integer.parseInt(String.valueOf(chars[i]))]);}}//判断传入数字为正数还是负数int signum = bigDecimalNum.signum();if (signum == -1) {sb.insert(0, CN_NEGATIVE);}return sb.toString();}/** ** int 转 中文数字* 支持到int最大值*  @param intNum 要转换的整型数*  @return 中文数字* */public static String intChineseNum(int intNum ){StringBuffer sb = new StringBuffer();//将负数转换为正数if (intNum < 0) {intNum *= -1;sb.append(CN_NEGATIVE);}char [] chats = (intNum + "").toCharArray();int index = chats.length-1;for (int i = 0; i < chats.length; i++) {sb.append((CN_NUM[Integer.valueOf(String.valueOf(chats[i]))]+"")+CN_UNIT[index-i]);}return sb.toString().trim().replaceAll("零[千百十]", "零").replaceAll("零+万", "万").replaceAll("零+亿", "亿").replaceAll("亿万", "亿零").replaceAll("零+", "零").replaceAll("零$", "");}/*** 中文数字 转 int* @param num 转换的中文数字* @return int*/public static int intNumber(String num){return Integer.valueOf(core(num));}/*** 中文数字 转 BigDecimal* @param num 转换的中文数字* @return BigDecimal*/public static BigDecimal bigDecimalNumber(String num){return new BigDecimal(core(num));}private static String core(String num){StringBuffer sb = new StringBuffer();for (int i = 0; i < CN_UNIT_SYMBOL.length; i++) {num = num.replaceAll(CN_UNIT_SYMBOL[i], "");}char[] chars = num.toCharArray();for (Character aChar : chars) {sb.append(NUM_MAP.get(aChar));}return sb.toString();}//    public static void main(String[] args) {
//        int num = 48616;
//        String nums = "48616.33";
//        String chineseNum = intChineseNum(num);
//        String bigDecimalChineseNum = bigDecimalChineseNum(new BigDecimal(nums));
//
//        System.out.println(chineseNum);
//        System.out.println(bigDecimalChineseNum);
//
//        int number = intNumber(chineseNum);
//        BigDecimal bigDecimal = bigDecimalNumber(bigDecimalChineseNum);
//
//        System.out.println(number);
//        System.out.println(bigDecimal);
//    }}

数字转中文数字与中文数字转数字相关推荐

  1. 【资源分享】数字图像处理MATLAB版冈萨雷斯+中文高清版+随书源码链接

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 1.数字图像处理MATLAB版冈萨雷斯+中文高清版 2.数字图像处理MATLAB版冈萨雷斯随书源码 1.数字图像处 ...

  2. 4、编写程序,根据用户输入的数字转换成相应的中文的大写数字。例如,1.23转换为“壹点贰叁”。

    –Python 4.编写程序,根据用户输入的数字转换成相应的中文的大写数字.例如,1.23转换为"壹点贰叁". 问题遇到的现象和发生背景 输入含有0就不会输出 问题相关代码 imp ...

  3. JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序

    定义:用本地特定的顺序来比较两个字符串. 语法:stringObject.localeCompare(target) 参数:target--要以本地特定的顺序与 stringObject 进行比较的字 ...

  4. Go 语言正则匹配 ID 逗号分隔 数字、英文字母、中文

    关键正则表达式: ok, _ := regexp.MatchString("^[A-Za-z\\d\u4e00-\u9fa5]+(,[A-Za-z\\d\u4e00-\u9fa5]+)*$& ...

  5. 数字的英文表达和中文表达

    //数字的英文表达和中文表达 public class NumEngAndChinese{//*************************中文表达************************ ...

  6. java将数字转简体中文和繁体中文,支持金额模式

    最近项目中用到金额转大写的地方,然后hutool里面正好有这个功能. 工具类路径: cn.hutool.core.convert.Convert#digitToChinese 方法描述: /*** 金 ...

  7. 使用python函数计算3.5四舍五入的结果_python 数字的四舍五入-Go语言中文社区

    python 数字的四舍五入 问题 你想对浮点数执行指定精度的舍入运算. 解决方案 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可.比如: 当一个值刚好在两个边界 ...

  8. 只提取单元格中的数字_提取Excel单元格中的数字(4类)及原理

    文中总结了4类从包含有中文.字母.数字的单元格数据中只提取数字的公式.(使用的时候把单元格名称改为实际的单元格名称即可). 1.提取文本左侧数据 当单元格中数字在左侧,文字内容在右侧时,我们可以使用一 ...

  9. linux找出重复数字,C语言笔试经典-查找多位数重复数字以及次数

    从键盘输入一个多位的整数 用程序判断 这个数里面有没有 重复的数字  有重复的数字就打印  哪个数字重复了  重复了几次 例如:输入:1122431 打印结果: 1重复 出现3次 2重复 出现2次, ...

  10. linux chmod命令数字,菜鸟学Linux命令:chmod命令和数字文件权限

    chmod是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数. 只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权 ...

最新文章

  1. R语言dplyr包if_else条件判断选择函数实战
  2. 使用FFmpeg生成HLS
  3. python大型项目经验_经验丰富程序员才知道的8种高级Python技巧
  4. 比特币将来能取代黄金,成为世界货币?
  5. Google:推荐几款好用的Chrome浏览器插件
  6. python操作redis集群_python 连接管理作redis集群
  7. 三星s7不能运行java_在调试模式下启动时Android应用程序崩溃
  8. ICE Tester method viewer 的安装和使用,和客制化代码配合使用
  9. 福利来了!本人近300G的学习资料愿与大家分享
  10. 《南风窗》长篇报道:仇恨引爆悲剧
  11. win10红警2黑屏_在windows 10中完美的运行《命令与征服·红色警戒2+尤里的复仇资料片...
  12. Python——理论学习笔记
  13. 项目一 认识Linux操作系统
  14. python repl_Python REPL通俗的理解什么?
  15. Linux内核源码分析—从用户空间复制数据到内核空间
  16. 我读《高效能人士的七个习惯》
  17. python中if not x_python使用 'if x is not None' 还是'if not x is None' – IT热血青年
  18. 算法之递归和循环比较
  19. 数据结构之KH [前四章] -->选择题 (一)
  20. WIN10 windows installar 启动类型灰色不可更改

热门文章

  1. 突发奇想之 Planning Trajectory
  2. 系统参数“启动作业计划”为“是”,下达前必须对生产订单指定作业计划!
  3. 如何使用DNSPod域名解析?
  4. 辽宁师范大学计算机学院团委电话,首页 - 共青团辽宁师范大学委员会
  5. 智慧监狱AI视频分析识别算法
  6. c语言 最小值算法,最常用的c语言算法
  7. php执行dmidecode,Linux dmidecode 命令
  8. 微软crm在哪新建审批模板_如何在Microsoft Word中创建模板
  9. matlab怎么实现循环,线性和循环卷积 - MATLAB Simulink - MathWorks 中国
  10. android华为手机虚拟键,华为手机为何“固执”地保留屏内虚拟按键?答案揭秘!...