1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用Java将阿拉伯数字转换为中文数字(适配小数转换)

使用Java将阿拉伯数字转换为中文数字(适配小数转换)

时间:2021-10-08 22:37:00

相关推荐

使用Java将阿拉伯数字转换为中文数字(适配小数转换)

Java数字转换工具类

本文借鉴了该博主所写的工具类

传送门:/wanlin77/article/details/88853816

初级码农一枚,非常欢迎优化、交流

简介

该工具类可以将整数、小数、负数转换为中文的数字,如:

0——>1——>2.1——>二点一-2.1——>负二点一

具体代码如下

import java.math.BigDecimal;/*** 数字转换中文** @author huangshuai* @date /11/22 0022*/public class NumberUtil {private NumberUtil() {}/*** 中文数字*/private static final String[] CN_NUM = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};/*** 中文数字单位*/private static final String[] CN_UNIT = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};/*** 特殊字符:负*/private static final String CN_NEGATIVE = "负";/*** 特殊字符:点*/private static final String CN_POINT = "点";/*** int 转 中文数字* 支持到int最大值* * @param intNum 要转换的整型数* @return 中文数字*/public static String int2chineseNum(int intNum) {StringBuffer sb = new StringBuffer();boolean isNegative = false;if (intNum < 0) {isNegative = true;intNum *= -1;}int count = 0;while(intNum > 0) {sb.insert(0, CN_NUM[intNum % 10] + CN_UNIT[count]);intNum = intNum / 10;count++;}if (isNegative)sb.insert(0, CN_NEGATIVE);return sb.toString().replaceAll("零[千百十]", "零").replaceAll("零+万", "万").replaceAll("零+亿", "亿").replaceAll("亿万", "亿零").replaceAll("零+", "零").replaceAll("零$", "");}/*** bigDecimal 转 中文数字* 整数部分只支持到int的最大值* * @param bigDecimalNum 要转换的BigDecimal数* @return 中文数字*/public static String bigDecimal2chineseNum(BigDecimal bigDecimalNum) {if (bigDecimalNum == null)return CN_NUM[0];StringBuffer sb = new StringBuffer();//将小数点后面的零给去除String numStr = bigDecimalNum.abs().stripTrailingZeros().toPlainString();String[] split = numStr.split("\\.");String integerStr = int2chineseNum(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++) {int index = Integer.parseInt(String.valueOf(chars[i]));sb.append(CN_NUM[index]);}}//判断传入数字为正数还是负数int signum = bigDecimalNum.signum();if (signum == -1) {sb.insert(0, CN_NEGATIVE);}return sb.toString();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。