找工作中,遇到一个java金额转换的题目,在网上查找了一些资料,看了不是太容易理解,理解能力不好。在此分享在吸取大神们处理方式的基础上自己整理的一个小程序,希望可以帮助到大家,也是自己的一个笔记。

代码如下:

import java.math.BigDecimal;

public class Convert {

static String cashUnitLeft[] = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟","亿", "拾", "佰", "仟", "万" };

static String cashUnitRight[] = { "角", "分", "厘" };

static String upperNumber[] = { "零", "壹", "贰", "弎", "肆", "伍", "陆", "柒","捌", "玖" };

public static String convert(BigDecimal money) {

String smoney = money.toString();

try{

if (smoney.indexOf(".") != -1) { //把数值分为整数型和带小数的数值分开处理。

String left = smoney.substring(0, smoney.indexOf("."));

String right = smoney.substring(smoney.indexOf(".") + 1);

String result = convertLeft(left) + convertRight(right);

return result;

} else {

return convertLeft(smoney);

}

}catch(IllegalArgumentException e){

System.out.println(e.getMessage());

System.out.println("请输入转换范围内现金");

return null;

}

}

private static String convertLeft(String left) { //处理整数部分。

int length = left.length(); //根据单位'亿','万','元',把整数部分分为3种情况处理。

if (length <= 4) { //金额在千元以内。

if(length == 1 && Integer.valueOf(left) == 0) //金额为'0'元时的特殊情况。

return "零元";

return convertPart(left, length);

} else if (length <= 8) { //金额在千万元以内。

String part1 = left.substring(0,length - 4);

String part2 = left.substring(length - 4, length);

String result1 = convertPart(part1, length);

String result2 = convertPart(part2, 4);

return result1 + result2;

} else if (length <= 12) { //金额在千亿元以内。

String part1 = left.substring(0, length - 8); //截取单位为'亿'部分数值。

String part2 = left.substring(length - 8, length - 4); //截取单位为'万'部分数值。

String part3 = left.substring(length - 4, length); //截取单位为'元'部分数值。

String result1 = convertPart(part1, length); //转换单位为'亿'部分数值。

String result2 = convertPart(part2, 8); //转换单位为'万'部分数值。

String result3 = convertPart(part3, 4); //转换单位为'元'部分数值。

String result = result1 + result2 + result3;

return result;

} else {

throw new IllegalArgumentException("超出转换数值范围!");

}

}

private static String convertRight(String right) { //处理小数部分。

String result = "";

String number = "";

String unit = "";

int length = right.length();

for (int i = 0; i < length; i++) {

String detail = right.substring(i, i + 1);

int value = Integer.valueOf(detail);

number = upperNumber[value];

unit = cashUnitRight[i];

result = result.concat(number).concat(unit);

}

result = result.replaceAll("零角", "").replaceAll("零分", "").replaceAll("零厘", "");

return result;

}

private static String convertPart(String part, int position) {

String result = "";

String number = "";

String unit = "";

if(part.equals("0000") && position == 8) //用于排除单位为'万'时,四位数值均为'0'的情况。

return "";

for (int i = 0; i < part.length(); i++) {

int value = Integer.valueOf(String.valueOf(part.charAt(i)));

number = upperNumber[value];

unit = cashUnitLeft[position - 1 - i];

result = result.concat(number).concat(unit);

}

result = result.replaceAll("零仟", "零").replaceAll("零佰", "零") //把单位'亿','万','元'放到最后替换。

.replaceAll("零拾", "零").replaceAll("零零", "零")

.replaceAll("零零", "零").replaceAll("零亿", "亿")

.replaceAll("零万", "万").replaceAll("零元", "元");

// result = result.replaceAll("零仟", "零");

// result = result.replaceAll("零佰", "零");

// result = result.replaceAll("零拾", "零");

// result = result.replaceAll("零零", "零");

// result = result.replaceAll("零零", "零");

// result = result.replaceAll("零亿", "亿");

// result = result.replaceAll("零万", "万");

// result = result.replaceAll("零元", "元");

System.out.println(result);

return result;

}

public static void main(String[] args) {

BigDecimal money = new BigDecimal("123456789123.789");

System.out.println("Before convert:" + money);

String result = convert(money);

System.out.println("After convert:" + result);

}

}

运行结果

Before convert:123456789123.789壹仟贰佰弎拾肆亿

伍仟陆佰柒拾捌万

玖仟壹佰贰拾弎元

After convert:壹仟贰佰弎拾肆亿伍仟陆佰柒拾捌万玖仟壹佰贰拾弎元柒角捌分玖厘

目前程序可以做一些金额大小写的转换,边写边改,自己测了一下常见的情况,可以正常转换。

思路不是太好,欢迎大家批评指教。

java小写金额转大写金额_java转换小写金额为大写金额相关推荐

  1. java面试解决项目难题_Java转换难题者,不适合工作(或面试)

    java面试解决项目难题 一个非常艰苦的面试问题可能是这样的: int i = Integer.MAX_VALUE; i += 0.0f; int j = i; System.out.println( ...

  2. java 字符串转成图片_java 转换图片为字符串,将字符串转换成图片显示

    java 转换图片为字符串,将字符串转换成图片显示, 该方法只适用于比较小的图片传输,50K以内: try{ // 将图片转换成字符串 File imgFile = new File("f: ...

  3. java 图片转jpg图片_JAVA转换jpg图片为渐进式图片

    很早之前看到一篇<web前端图片极限优化策略>,了解有jpg分为baseline-jpeg和preogressive-jpeg. 具体的区别如下: baseline-jpeg: 在文件较大 ...

  4. java转json jar包_java转换json需导入的jar包说明

    commons-beanutils-1.8.0.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBe ...

  5. java+解析png+gif图片_Java 转换png jpg gif格式图片的相互转换的实现

    利用JDK原生支持对png jpg gif格式图片做相互转换,结合脚本就可以达到批量处理的能力,比PS来的快啊!而且是JAVA代码 在Windows和Linux上都可以用. import java.a ...

  6. Java工具包:小写金额转换成大写金额

    源代码如下 package com.jian.stringUtil;/*** 工具类:小写金额转换成大写金额* * @author jianxuanbing* */ @SuppressWarnings ...

  7. 使用javabean把小写金额转换成大写金额

    public static void main(String[] args) {moneyConversion mc=new moneyConversion();String money=" ...

  8. 工具篇——MoneyFormatUtil(用于将人民币小写金额转换成大写金额)

    写代码的四点: 1.明确需求.要做什么? 2.分析思路.要怎么做?(1,2,3--) 3.确定步骤.每一个思路要用到哪些语句.方法和对象. 4.代码实现.用具体的语言代码将思路实现出来. 学习新技术的 ...

  9. 人民币小写金额转大写金额

    #region 人民币小写金额转大写金额/// <summary>/// 小写金额转大写金额/// </summary>/// <param name="Mon ...

  10. 小写金额转换为大写金额JS方法

    /**  *function: 小写金额转换为大写金额  *return: 转换后的大写金额,类型String */ function money2Cn(str){  var temp = parse ...

最新文章

  1. 设计模式系列8--策略模式
  2. [腾讯云]简单在腾讯云 CenTOS7.0 安装Nginx,Mysql(MariaDB),Memcache,解析PHP!
  3. MongoDB的地理位置索引
  4. Angular JS (2)
  5. 图解高性能服务器开发两种模式,第四章 NETTY高性能架构设计
  6. Jenkins可持续集成
  7. VLFeat工具包在matlab使用方法
  8. 查看oracle数据库服务器的名字
  9. linux chmod 777 r,chmod -R 777 的3种补救办法,附有linux chmod命令语法和结构详解
  10. J2EE框架技术(SpringMVC) 知识点笔记(1)
  11. 金融人都在选择的硕士项目---中国人民大学与加拿大女王大学金融硕士
  12. 通达信指标公式常用绘图函数(2)——DRAWLINE、DRAWKLINE、STICKLINE
  13. 入门小程序·搭建论坛
  14. php html5 播放器,html5实现完美兼容各大浏览器的播放器_html5教程技巧
  15. JAVA 单商户商城系统 成熟源码 支持二开
  16. 阿里云FaaS舜天平台:执FPGA异构计算之牛耳
  17. shell脚本(linux)
  18. [转] PID算法的解析()
  19. Oracle表空间系列
  20. 基于Altium Designer进行可变电阻元件封装

热门文章

  1. 虚拟机处理器核数与物理cpu的关系
  2. Odoo的采购入库单、销售发货单整单被取消,或选择了不生成欠单后又想继续入库或发货,如何处理?
  3. ThinkPHP6校园疫情防控管理系统
  4. 解决This application failed to start because no Qt platform plugin could be initialized的问题
  5. FW与手机APP交互的问题
  6. fw300r虚拟服务器设置,迅捷(fast)fw300r路由器用手机怎么设置? | 192路由网
  7. eNSP-利用单臂路由实现VLAN 间路由
  8. java获取本机ip地址和tomcat端口号
  9. DW里面html鼠标点击特效,【好好学习】-DW-鼠标点击 爆米花特效 代码
  10. APP瘦身之资源优化篇