数字转中文数字与中文数字转数字
利用数组与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);
// }}
数字转中文数字与中文数字转数字相关推荐
- 【资源分享】数字图像处理MATLAB版冈萨雷斯+中文高清版+随书源码链接
写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 1.数字图像处理MATLAB版冈萨雷斯+中文高清版 2.数字图像处理MATLAB版冈萨雷斯随书源码 1.数字图像处 ...
- 4、编写程序,根据用户输入的数字转换成相应的中文的大写数字。例如,1.23转换为“壹点贰叁”。
–Python 4.编写程序,根据用户输入的数字转换成相应的中文的大写数字.例如,1.23转换为"壹点贰叁". 问题遇到的现象和发生背景 输入含有0就不会输出 问题相关代码 imp ...
- JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序
定义:用本地特定的顺序来比较两个字符串. 语法:stringObject.localeCompare(target) 参数:target--要以本地特定的顺序与 stringObject 进行比较的字 ...
- Go 语言正则匹配 ID 逗号分隔 数字、英文字母、中文
关键正则表达式: ok, _ := regexp.MatchString("^[A-Za-z\\d\u4e00-\u9fa5]+(,[A-Za-z\\d\u4e00-\u9fa5]+)*$& ...
- 数字的英文表达和中文表达
//数字的英文表达和中文表达 public class NumEngAndChinese{//*************************中文表达************************ ...
- java将数字转简体中文和繁体中文,支持金额模式
最近项目中用到金额转大写的地方,然后hutool里面正好有这个功能. 工具类路径: cn.hutool.core.convert.Convert#digitToChinese 方法描述: /*** 金 ...
- 使用python函数计算3.5四舍五入的结果_python 数字的四舍五入-Go语言中文社区
python 数字的四舍五入 问题 你想对浮点数执行指定精度的舍入运算. 解决方案 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可.比如: 当一个值刚好在两个边界 ...
- 只提取单元格中的数字_提取Excel单元格中的数字(4类)及原理
文中总结了4类从包含有中文.字母.数字的单元格数据中只提取数字的公式.(使用的时候把单元格名称改为实际的单元格名称即可). 1.提取文本左侧数据 当单元格中数字在左侧,文字内容在右侧时,我们可以使用一 ...
- linux找出重复数字,C语言笔试经典-查找多位数重复数字以及次数
从键盘输入一个多位的整数 用程序判断 这个数里面有没有 重复的数字 有重复的数字就打印 哪个数字重复了 重复了几次 例如:输入:1122431 打印结果: 1重复 出现3次 2重复 出现2次, ...
- linux chmod命令数字,菜鸟学Linux命令:chmod命令和数字文件权限
chmod是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数. 只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权 ...
最新文章
- R语言dplyr包if_else条件判断选择函数实战
- 使用FFmpeg生成HLS
- python大型项目经验_经验丰富程序员才知道的8种高级Python技巧
- 比特币将来能取代黄金,成为世界货币?
- Google:推荐几款好用的Chrome浏览器插件
- python操作redis集群_python 连接管理作redis集群
- 三星s7不能运行java_在调试模式下启动时Android应用程序崩溃
- ICE Tester method viewer 的安装和使用,和客制化代码配合使用
- 福利来了!本人近300G的学习资料愿与大家分享
- 《南风窗》长篇报道:仇恨引爆悲剧
- win10红警2黑屏_在windows 10中完美的运行《命令与征服·红色警戒2+尤里的复仇资料片...
- Python——理论学习笔记
- 项目一 认识Linux操作系统
- python repl_Python REPL通俗的理解什么?
- Linux内核源码分析—从用户空间复制数据到内核空间
- 我读《高效能人士的七个习惯》
- python中if not x_python使用 'if x is not None' 还是'if not x is None' – IT热血青年
- 算法之递归和循环比较
- 数据结构之KH [前四章] -->选择题 (一)
- WIN10 windows installar 启动类型灰色不可更改
热门文章
- 突发奇想之 Planning Trajectory
- 系统参数“启动作业计划”为“是”,下达前必须对生产订单指定作业计划!
- 如何使用DNSPod域名解析?
- 辽宁师范大学计算机学院团委电话,首页 - 共青团辽宁师范大学委员会
- 智慧监狱AI视频分析识别算法
- c语言 最小值算法,最常用的c语言算法
- php执行dmidecode,Linux dmidecode 命令
- 微软crm在哪新建审批模板_如何在Microsoft Word中创建模板
- matlab怎么实现循环,线性和循环卷积
- MATLAB Simulink
- MathWorks 中国
- android华为手机虚拟键,华为手机为何“固执”地保留屏内虚拟按键?答案揭秘!...