public static String getStr(double money) {BigDecimal amount = new BigDecimal(money);amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);BigDecimal zero = new BigDecimal("0.00");zero = zero.setScale(2, BigDecimal.ROUND_HALF_UP);/** 1 处理特殊的 */if (zero.compareTo(amount) == 0)return "零元整";// 最多不能超过999999999999(千亿)if (amount.compareTo(new BigDecimal("999999999999")) > 0)return "";String str = "";String number[] = new String[] { "零 ", "壹 ", "贰 ", "叁 ", "肆 ", "伍 ","陆 ", "柒 ", "捌 ", "玖 " };String units[] = new String[] { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟","亿", "拾", "佰", "仟", };double temp = amount.doubleValue();int i = 0;/** 2 整数部分,按从小到大的顺序把各位拆分开 */while (temp >= 10) {int n = (int) (temp % 10);temp = temp / 10L;str = str.trim() + units[i++].trim() + number[n].trim();}str = str.trim() + units[i++].trim() + number[(int) temp].trim();StringBuffer sb = new StringBuffer(str.trim());/** 3 反转成正常的顺序 */sb.reverse();str = sb.toString();/** 4 处理小数部分 */int dolt1 = (int) (amount.multiply(new BigDecimal("100")).longValue() % 10);// 分int dolt2 = (int) (amount.multiply(new BigDecimal("10")).longValue() % 10);// 角if (dolt1 == 0 && dolt2 == 0) {str = str + "整";} else if (dolt1 != 0) {if (dolt2 != 0)str = str + number[dolt2].trim() + "角" + number[dolt1].trim()+ "分";elsestr = str + "零" + number[dolt1].trim() + "分";} else if (dolt2 != 0) {str = str + number[dolt2].trim() + "角整";}/** 5 去除多余的汉字并在合适的位置加上零 */while (str.indexOf("零亿") != -1 || str.indexOf("零万") != -1|| str.indexOf("零仟") != -1 || str.indexOf("零佰") != -1|| str.indexOf("零拾") != -1 || str.indexOf("零元") != -1) {str = str.replaceAll("零亿", "亿");str = str.replaceAll("零万", "万");str = str.replaceAll("零仟", "零");str = str.replaceAll("零佰", "零");str = str.replaceAll("零拾", "零");if (str.startsWith("零元"))str = str.replaceAll("零元", "");elsestr = str.replaceAll("零元", "元");}/*** 6 去掉零以后可能出现亿万,万千连着的情况,要去掉 如800000000,原来为 捌亿万元,要变成 捌亿零元*/if (str.indexOf("亿万") != -1) {str = str.replaceAll("亿万", "亿零");}if (str.indexOf("万仟") != -1) {str = str.replaceAll("万仟", "万零");}/*** 7 万位、亿位是"0",但千位不是"0"时,金额中写一个零字 如69906711.62,原来为 陆仟玖佰玖拾万陆仟柒佰壹拾壹元陆角贰分* 要写成 陆仟玖佰玖拾万零陆仟柒佰壹拾壹元陆角贰分*/String req = ".*佰亿.仟.*";if (str.matches(req)) {str = str.substring(0, str.indexOf("佰亿") + 2) + "零"+ str.substring(str.indexOf("佰亿") + 2);}req = ".*拾亿.仟.*";if (str.matches(req)) {str = str.substring(0, str.indexOf("拾亿") + 2) + "零"+ str.substring(str.indexOf("拾亿") + 2);}req = ".*佰万.仟.*";if (str.matches(req)) {str = str.substring(0, str.indexOf("佰万") + 2) + "零"+ str.substring(str.indexOf("佰万") + 2);}req = ".*拾万.仟.*";if (str.matches(req)) {str = str.substring(0, str.indexOf("拾万") + 2) + "零"+ str.substring(str.indexOf("拾万") + 2);}/** 8 如果有零元的变成元 */while (str.indexOf("零元") != -1) {str = str.replaceAll("零元", "元");}/** 9 如果元位为0,但是后面有角,元和角之间加上零 */if ((str.indexOf("拾元") != -1 || str.indexOf("佰元") != -1|| str.indexOf("仟元") != -1 || str.indexOf("万元") != -1 || str.indexOf("亿元") != -1)&& str.indexOf("角") != -1) {str = str.substring(0, str.indexOf("元") + 1) + "零"+ str.substring(str.indexOf("元") + 1);}/** 10 去掉重复的零 */while (str.indexOf("零零") != -1) {str = str.replaceAll("零零", "零");}/** 11 处理一些特殊情况 */if ((str.startsWith("整") || str.startsWith("零")) && str.length() > 1) {str = str.substring(1);}return str;}

result:

getStr(1000000101.59999)壹拾亿零壹佰零壹元陆角整

JAVA_数字转大写

JAVA_金额大写转换相关推荐

  1. 中文金额大写转换处理

    2019独角兽企业重金招聘Python工程师标准>>> /** 金额单位(整数) */private final static String[] PRCE_UNIT = new St ...

  2. Java版 数字金额大写转换

    需求:读入一个浮点数值,将其转化为中文金额的大写形式.如123.45,转化为:壹佰贰拾叁元肆角伍分. 以下是各种情况要完善: 1. 当金额为整数,只表示整数部分,省略小数部分,并添加"整&q ...

  3. 大数值金额大写转换(C语言)

    关于大数值金额大写转换,在财务管理的应用方面没什么意义.一般来说,千亿级,万亿级的数值就够了.因为在国家级层面是以亿为单位的,也就表达为千万亿,万万亿.在企业层面数值金额转换设置到千亿.万亿就行了.大 ...

  4. 数字金额大写转换Java工具类

    Mark一下: 摘取自 若依框架com.hanhua.common.core.text.Convert /*** 数字金额大写转换 先写个完整的然后将如零拾替换成零** @param n 数字* @r ...

  5. [收藏|转贴]货币金额大写转换库(C#)

    货币金额大写转换库 http://www.vckbase.com/bbs/prime/viewprime.asp?id=576 // 货币金额大写转换库   Money2String.dll // 静 ...

  6. mysql金额数字转成中文_数字金额大写转换(可以处理整数,小数,负数)

    数字金额大写转换(可以处理整数,小数,负数) 代码 //数字金额大写转换 function upDigit(n) { var fraction = ['角', '分']; var digit = [' ...

  7. html5 选择金额样式,[JavaScript] 数字金额大写转换 v2

    几天前分享了一段 JavaScript 版的<整数金额大写转换>,不过只能处理整数的. 刚刚做了一个改进,可以处理两位小数(角和分)和负数(欠款). function digit_uppe ...

  8. JAVA----数字金额大写转换

    数字金额大写转换 先写个完整的然后将如零拾替换成零 public class NumUtils { /*** 数字金额大写转换* @param n 数字* @return 中文大写数字*/public ...

  9. java-数字金额大写转换

    /*** 数字金额大写转换,思想先写个完整的然后将如零拾替换成零 要用到正则表达式*/ public static String digitUppercase(double n) {String fr ...

最新文章

  1. [置顶] 正则表达式应用:匹配IP地址
  2. Python 计算机视觉(四)—— OpenCV进行图像算数与逻辑运算
  3. 分布式服务常见问题—分布式事务
  4. 分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 这两个box信息
  5. php json to object,PHP JSON_FORCE_OBJECT函数实现强转对象
  6. server2008密码不满足密码策略的要求,检查最小密码长度、密码复杂性和密码历史的要求”的解决办法...
  7. 统计单词个数(codevs 1040)
  8. Nagios 监控redis
  9. shell日期加减及数组循环
  10. echarts怎么保存图片到剪切板上_Mac上微信、QQ的聊天图片和记录保存在哪?如何清理或导出?...
  11. 用微PE安装KALI LINUX到U盘,【U盘安装kali】U盘 kali pe三合一教程!装机,存储
  12. PackageManager
  13. ppt文件太大怎么压缩?
  14. CentOS7-1810 系统DNS服务器BIND软件配置说明
  15. Android资源,国内镜像站点,博客文章等
  16. SAP MM 根据采购订单反查采购申请?
  17. codeforces 1090B切题记录
  18. cdrx8如何批量导出jpg_CDR怎么批量导出图片
  19. Java字符串转Json对象
  20. 关于pixhawk2.1+px4 1.7.3stable出现mag sensors inconsistent问题分析

热门文章

  1. 掘金Loading渐变效果, 数据加载等待时的, 渐变效果
  2. 斯坦福大学C语言课程观后感,乔布斯斯坦福大学演讲观后感.doc
  3. 综述:基于骨骼(skeleton)的动作识别方法
  4. Android水面落叶动态壁纸源码及分析 附下载地址
  5. java-net-php-python-91ssm社会公共常识科普网开题ppt计算机毕业设计程序
  6. cisco 导入lincense文件
  7. 学计算机电脑需要多大内存,电脑内存是多少 电脑内存多大合适
  8. 在线获取网页源代码 - 在线查看源代码 - 源文件查看工具
  9. 计算机在线应用不能安装,电脑如何禁止安装软件,教你win10电脑禁止安装软件的设置教程...
  10. Alcohol 120%刻录教程