金额转换类
package com.util.NumberFormat;
import java.math.BigDecimal;
import java.util.EnumMap;
public class NumberFormat {
// 1. 定义数字单位的枚举类型
public enum UnitOfMeasurement {
/**
* 利用构造函数传参:万,百万,千万,亿,十亿,百亿,千亿
* 由于没有对应的英文单词表示
*/
QIANYI(11),BAIIYI(10),YI(8),QIANWAN (7),BAIWAN (6),WAN (4),GEWEI(0);
// 定义私有变量
private int nCode ;
// 构造函数,枚举类型只能为私有
private UnitOfMeasurement( int _nCode) {
this . nCode = _nCode;
}
@Override
public String toString() {
return String.valueOf ( this . nCode );
}
}
/**
* 创建数据计量单位的枚举类型数据值
* @return
*/
private static EnumMap<UnitOfMeasurement, String> creatEnumMap(String type) {
// 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是 key 的类的类型
EnumMap<UnitOfMeasurement, String> currEnumMap = new EnumMap<UnitOfMeasurement, String>(UnitOfMeasurement. class );
currEnumMap.put(UnitOfMeasurement. GEWEI , type );
currEnumMap.put(UnitOfMeasurement. WAN , "万" );
currEnumMap.put(UnitOfMeasurement. BAIWAN , "百万 " );
currEnumMap.put(UnitOfMeasurement. QIANWAN , "千万" );
currEnumMap.put(UnitOfMeasurement. YI , "亿" );
currEnumMap.put(UnitOfMeasurement. BAIIYI , "百亿 " );
currEnumMap.put(UnitOfMeasurement. QIANYI , "千亿" );
return currEnumMap;
}
/**
* 将BigDecimal 数据整理格式
* 计算方式万,百万,千万,亿,
* bigDecimal 最大值只支持到十亿
* @param number
* @return
*/
public static String numberFormat(BigDecimal number,String type){
String numberFormat="0";
try{
if(type!=null){
numberFormat=numberFormat+type;
}
if(number!=null){
EnumMap<UnitOfMeasurement, String> currEnumMap =creatEnumMap(type);
for(UnitOfMeasurement aUnit : UnitOfMeasurement.values ()){
BigDecimal mu=(new BigDecimal(10)).pow(aUnit.nCode);//求幂值计算
if(number.compareTo(mu)>=0){
String numberString=number.divide(mu, 2, BigDecimal.ROUND_HALF_UP).toString();
System.out.println("numberString=="+numberString);
String[] ret=numberString.split("\\.");
if(ret[1].equals("00")){//去除小数位全部为0情况
numberString=ret[0];
}else{
if(ret[1].endsWith("0")){//去除只有末尾为0的情况
numberString=numberString.substring(0, numberString.length()-1);
}
}
numberFormat=numberString+currEnumMap.get(aUnit);
break;
}
}
}
}catch(Exception e){
e.printStackTrace();
}
return numberFormat.trim();
}
/* * test方法*/
public static void main(String[] args ) {
//元
String ss= numberFormat(new BigDecimal(210000),"元");
System.out.println("ss=="+ss);
//2万 1.9
String ss1= numberFormat(new BigDecimal(19999),"元");
System.out.println("ss=="+ss1);
//十万21
String ss2= numberFormat(new BigDecimal(210000),"元");
System.out.println("ss=="+ss2);
//百万2.21
String ss3= numberFormat(new BigDecimal(2210000),"元");
System.out.println("ss=="+ss3);
//千万1.89
String ss4= numberFormat(new BigDecimal(18900000),"元");
System.out.println("ss=="+ss4);
//亿
String ss5= numberFormat(new BigDecimal(189000000),"元");
System.out.println("ss=="+ss5);
//十亿
String ss6= numberFormat(new BigDecimal(1890000000),"元");
System.out.println("ss=="+ss6);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决