当前位置: 首页 > news >正文

阿拉伯数字转中文数字字符,最高支持千京

直接上代码

@UtilityClass
public class NumberFormatUtil {/** 中文 -> 数字对应关系 */private static final Map<Character, Integer> DIGIT_CHINA = new HashMap<>();/** 数字 -> 中文对应关系 */private static final Map<Integer, Character> DIGIT_NUM = new HashMap<>();/** 中文 -> 增量对应关系 */private static final Map<Character, Integer> POSITION_CHINA = new HashMap<>();/** 增量 -> 中文对应关系 */private static final Map<Integer, Character> POSITION_NUM = new HashMap<>();static {DIGIT_CHINA.put('零', 0);DIGIT_CHINA.put('一', 1);DIGIT_CHINA.put('二', 2);DIGIT_CHINA.put('三', 3);DIGIT_CHINA.put('四', 4);DIGIT_CHINA.put('五', 5);DIGIT_CHINA.put('六', 6);DIGIT_CHINA.put('七', 7);DIGIT_CHINA.put('八', 8);DIGIT_CHINA.put('九', 9);DIGIT_NUM.put(0, '零');DIGIT_NUM.put(1, '一');DIGIT_NUM.put(2, '二');DIGIT_NUM.put(3, '三');DIGIT_NUM.put(4, '四');DIGIT_NUM.put(5, '五');DIGIT_NUM.put(6, '六');DIGIT_NUM.put(7, '七');DIGIT_NUM.put(8, '八');DIGIT_NUM.put(9, '九');POSITION_CHINA.put('十', 1);POSITION_CHINA.put('百', 2);POSITION_CHINA.put('千', 3);POSITION_CHINA.put('万', 4);POSITION_CHINA.put('亿', 7);POSITION_CHINA.put('兆', 11);POSITION_CHINA.put('京', 15);POSITION_CHINA.put('%', -2);POSITION_CHINA.put('‰', -3);POSITION_NUM.put(1, '十');POSITION_NUM.put(2, '百');POSITION_NUM.put(3, '千');POSITION_NUM.put(4, '万');POSITION_NUM.put(8, '亿');POSITION_NUM.put(12, '兆');POSITION_NUM.put(16, '京');POSITION_NUM.put(-2, '%');POSITION_NUM.put(-3, '‰');}/*** 将阿拉伯数字转为中文数字* 采用StringBuilder,连接所有数字* 一开始判断有无负号,小数点,以及百分号* 等到数字完全连接成功,再将数字和负号小数点百分号标识连接起来* @param number 数字* @return 中文字符串*/public static String numberToChina(Long number) {if (number == 0) {return String.valueOf(DIGIT_NUM.get(0));}StringBuilder result = new StringBuilder();if (number < 0) {result.append("负");number = -number;}int position = 0;while (number > 0) {int digit = (int) (number % 10);Character positionNum = POSITION_NUM.get(position);if (digit != 0) {if ((position == 1 || position > 4) && digit == 1 && number < 10) {// 双位数十的特殊处理// 十万,十亿,十兆的特殊处理result.insert(0, POSITION_NUM.get(position % 4));} else if (positionNum != null) {// 个十百千万亿兆的特殊处理result.insert(0, DIGIT_NUM.get(digit));result.insert(1, positionNum);} else {// 非1的所有数字处理result.insert(0, DIGIT_NUM.get(digit));if (position > 0) {int pos = position > 4 ? position % 4 : position;result.insert(1, POSITION_NUM.get(pos));}}} else if (positionNum != null && position > 3) {result.insert(0, positionNum);} else {result.insert(0, DIGIT_NUM.get(digit));}number /= 10;position++;}return result.toString();}/*** 中文转换成数字* @param numStr 数字字符串* @return 数字*/public static Integer chinaToNumber(String numStr) {throw new IllegalArgumentException(numStr);}
}

up个人博客地址:阿拉伯数字转中文数字字符,最高支持千京

http://www.lryc.cn/news/117017.html

相关文章:

  • Python基础--序列操作/函数
  • Kafka与Zookeeper版本对应关系
  • Arch Linux 使用桥接模式上网
  • Vue 中使用 WebWorker
  • 财务管理系统javaweb会计账房进销存jsp源代码mysql
  • 企业服务器被devos勒索病毒攻击后怎么处理,devos勒索病毒如何攻击的
  • React源码解析18(2)------ FilberNode,FilberRootNode结构关系
  • 什么是Session?它在SQLAlchemy中扮演什么角色?
  • Java 中 Set集合常用方法
  • (MVC)SpringBoot+Mybatis+Mapper.xml
  • 【Linux命令行与Shell脚本编程】第十九章 正则表达式
  • vue exceljs 实现导出excel并设置网格线、背景色、 垂直居中、分页打印
  • TC358774/5显示桥接(MIPI DSI到LVDS)
  • 企业内部FAQ常见问题展示分享的价值
  • React 核心开发者 Dan Abramov 宣布从 Meta 离职
  • 【C/C++】std::vector 优化点(官方同步)
  • 【vue3】elementPlus主题色定制
  • MATLAB 2023a的机器学习、深度学习
  • 【Python实际使用】Python提取pdf中的表格数据输出到excel(含代码实例)
  • css的transform样式计算-第一节
  • C++中vector、list和deque的选择:什么时候使用它们?
  • 【力扣每日一题】2023.8.10 下降路径最小和Ⅱ
  • gh-ost概述(二实践)
  • 临时文档3
  • 【OpenGauss源码学习 —— 执行算子(SeqScan算子)】
  • Postman中,既想传递文件,还想传递多个参数(后端)
  • 跨境干货|TikTok变现的9种方法
  • Grafana 曲线图报错“parse_exception: Encountered...”
  • idea中提示Unsupported characters for the charset ‘ISO-8859-1‘
  • 通过signtool进行数字签名和验证签名