Java数字转换工具类

简介

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

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

具体代码如下

import java.math.BigDecimal;

/**
* 数字转换中文
*
* @author huangshuai
* @date 2019/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();
}
}

使用Java将阿拉伯数字转换为中文数字(适配小数转换)的更多相关文章

  1. C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字

    项目中经常会格式化数据,转换数字的使用情况比较多,记录一下数字转换的方法! 如果需要转换为繁体中文,将数组里的汉字换成繁体中文即可. 1.阿拉伯数字转换为中文数字 /// <summary> ...

  2. java实现 阿拉伯数字转换为汉字数字 算法

    package test; public class NumberFormatTest { static String[] units = { "", "十", ...

  3. java实现 阿拉伯数字转换为汉字数字(转载)

    public class VedioExtractSpeech { public static void main(String[] args) { System.out.println(" ...

  4. Java 阿拉伯数字转换为中文大写数字

    Java 阿拉伯数字转换为中文大写数字 /** * <html> * <body> * <P> Copyright 1994 JsonInternational&l ...

  5. oc 阿拉伯数字转中文数字

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.numberStyle = NSNumberFor ...

  6. 用SQL将数字转换为中文数字

    IF OBJECT_ID('fn_GetChnNum') IS NOT NULL BEGIN DROP FUNCTION dbo.fn_GetChnNum; END; GO CREATE FUNCTI ...

  7. java字符,字符串,数字之间的转换

    string 和int之间的转换 string转换成int  :Integer.valueOf("12") int转换成string : String.valueOf(12) ch ...

  8. PHP金额工具类之将阿利伯数字转换为大写中文数字

    1.将阿拉伯数字转换为中文大写数字 <?php namespace core\components; class PriceHelper extends \yii\base\Component{ ...

  9. Javascript中将数字转换为中文的方法

    //js实现将数字1234转化为汉字字符串(一千二百三十四)(或大写汉字壹仟贰佰叁拾肆): /*阿拉伯数字转中文数字 中文数字的特点: 每个计数数字都跟着一个权位,权位有:十.百.千.万.亿. 以“万 ...

随机推荐

  1. MySQL银行ATM存取款机系统(需求分析)

    银行ATM需求文档 一.E-R图形文 二.开发步骤 1.明确需求--数据库设计--编码实现功能--测试 2.绘制e-r图--绘制数据库模型图--使用三大方式规范数据库结构 三.开发思路 1. 模型图综 ...

  2. 存储系列之 LUN 和 LVM

    一.LUN 1.LUN的由来 上一篇文章已经介绍了RAID技术的原理,那么RAID的实现呢?有两种方式,RAID软件和RAID硬件.但是因软件RAID占用主机CPU和主机内存,而且RAID功能不易实现 ...

  3. SpringAOP注解报错:java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut selectAll

    原因 我使用的aspectjweaver.jar版本是1.5.1,版本过低,导致报错. 需要下载高本版的aspectjweaver.jar. 解决办法 在这里下载:https://mvnreposit ...

  4. SpringCloud异常处理统一封装我来做-使用篇

    SpringCloud异常处理统一封装我来做-使用篇 简介 重复功能我来写.在 SpringBoot 项目里都有全局异常处理以及返回包装等,返回前端是带上succ.code.msg.data等字段.单 ...

  5. hdu3861他的子问题是poj2762二分匹配+Tarjan+有向图拆点 其实就是求DAG的最小覆盖点

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. HDU1160

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 题目大意:给出多个数据组(最多1000个),terminated by end of file, ...

  7. 在DAO的查询操作里,数据库查询到记录,sql语句也成功执行,但是返回的对象是null

     在这里  如果改成User user=null; 后面 对user对象的赋值是会失败的. 原因: 要赋值的话,一定要有对象,要new一下给对象分配空间然后再给对象赋值.

  8. 【百度网盘活动】扩容2T+7天会员

    https://pan.baidu.com/component/view?id=455 https://pan.baidu.com/union/smartProgramShare?scheme=bdn ...

  9. CSS 伪选择器 focus-within 介绍

    CSS中的 :focus-within 伪选择器可有点"不寻常",尽管它的名称看上去很简单,而且相当直观.但它的解释是:选择一个包含具有:focus 的任何子元素的元素.有点绕是不 ...

  10. Java程序员的两项通用能力

    工作这几年来,经历了很多.从小白到中级(手机里有一款叫中国象棋的游戏,里面给对弈中电脑水平分为小白.菜鸟.新手.入门.初级.中级.高级.大师.特级大师,编程我暂且按照这样来区分). 学校教给我的是从小 ...