package com.wondersgroup.procomponent;import java.math.BigDecimal;public class Transformation {/*** 汉语中数字大写*/private static final String [] CN_UPPER_NUMBER = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};/*** 汉语中货币单位大写,类似占位符*/private static final String [] CN_UPPER_MONETRAY_UNIT = {"分","角","元","拾","佰","仟","万","拾","佰","仟","亿","拾"};/*** 特殊字符:整*/private static final String CN_FULL = "整";/*** 特殊字符:负*/private static final String CN_NEGATIVE = "负";/*** 全额的精度,默认值为2*/private static final int MONEY_PRECISION = 2;/*** 特殊字符:零元整*/private static final String CN_ZEOR_FULL = "零元";public static String number2CNMontrayUnit(BigDecimal numerOfMoney){StringBuffer sb = new StringBuffer();//返回-1,表示该数小于0,  0:表示该数等于0, 1:表示该数大于0int signum = numerOfMoney.signum();//零元的情况if(signum == 0){return CN_ZEOR_FULL;}/*** 它等效于将该值的小数点向右移动n位。如果n为非负,则呼叫仅仅减去n。如果n为负,则调用等效于movePointLeft(-N)* 金额一会进行四舍五入*/long number = numerOfMoney.movePointRight(MONEY_PRECISION).setScale(0, 4).abs().longValue();//获取到小数点后两位值long scale = number % 100;int numUnit = 0;int numIndex = 0;boolean getZero = false;//判断后两位,一共有四种情况 00=0,01=1,10,11if(!(scale > 0)){numIndex = 2;number = number / 100;getZero = true;}if((scale > 0) && (!(scale % 10 > 0))){numIndex = 1;number = number / 10;getZero = true;}int zeroSize = 0;while (true) {if (number <= 0) {break;}//每次获取都最后一个值numUnit = (int)(number % 10);if(numUnit > 0){if((numIndex == 9) && (zeroSize >= 3)){sb.insert(0, CN_UPPER_MONETRAY_UNIT[6]);}if((numIndex == 13) && (zeroSize >= 3)){sb.insert(0, CN_UPPER_MONETRAY_UNIT[10]);}sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);sb.insert(0, CN_UPPER_NUMBER[numUnit]);getZero = false;zeroSize = 0;}else{++zeroSize;//分,角,元,万,亿,兆位不会出现零if(numIndex != 0 && numIndex != 1 && numIndex != 2 && numIndex != 6 &&numIndex != 10 && numIndex != 14){if (!(getZero)) {sb.insert(0, CN_UPPER_NUMBER[numUnit]);}}if(numIndex == 2){if(number > 0){sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);}}else if(((numIndex -2) / 4 == 0) && (number % 1000 > 0)){sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);}getZero = true;}//number每次都去掉最后一位number = number / 10;++numIndex;}//如果signum == -1,则说明输入的数字为负数,就在前面追加特殊符号:负if(signum == -1){sb.insert(0, CN_NEGATIVE);}//除了0.00其他数据都带特殊字符:整sb.append(CN_FULL);//返回return sb.toString();}public static void main(String[] arge){double money = -12.34;BigDecimal bigDecimal = new BigDecimal(money);System.out.println("你输入的金额为" +money+"输出大写金额    为"+Transformation.number2CNMontrayUnit(bigDecimal).toString());}
}

将数字金额转换成大写金额相关推荐

  1. [python]数字金额转换成大写金额

    最近开始负责单位的测绘合同草拟和签订,所以打算用python-docx来制作模板,减少自己的工作量.因为合同中有金额的大写内容,所以做了一个转换的函数. 因为行业内几乎签不了上亿的合同,所以函数只能转 ...

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

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

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

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

  4. 把数字金额转换成人民币大写[原创]

    最近在用这个博客,感觉博客园不错,以前用的是新浪的,感觉这个更好,所以好多东西现在转到这边来了. 下面是一个数字转人民币大写的类,不啰嗦了,下面是代码:  1    /**/ /// <summ ...

  5. 把数字金额转换成中文大写数字

    //把数字金额转换成中文大写数字 function changeNumMoneyToChinese(money) { var cnNums = new Array("零", &qu ...

  6. PB中小写金额转换成大写金额(发票类型)

    PB中小写金额转换成大写金额 //================================================================= // 功能:小写金额转换成大写金额 ...

  7. 小写金额转换成大写金额的函数

    编写一个收费软件时要用到一个小写金额转换成大写金额的函数,我曾在网上找到一个用Powerbuilder写的函数,长达四五十行之巨,后来我自己用DELPHI写了一个函数,寥寥几行代码就搞定: funct ...

  8. .NET把小写数字金额转换成大写人民币金额的两种算法

    第一种方法: 用正则表达式,C#方法如下 usingSystem.Text.RegularExpressions;//首先引入命名空间 private string DaXie ( string  m ...

  9. 【简单易懂】Java字符串应用场景:数字金额转换成大写汉字金额【金额转换】

    Java字符串应用场景:数字金额转换成汉字金额 文章目录 Java字符串应用场景:数字金额转换成汉字金额 前言 一.String简单介绍 二.字符串在开发中的应用场景 三.金额转换 3.1解题思路 3 ...

  10. js和 ts 将大数字金额转换成带单位的数字金额,万,千万,亿,格式化金额数字,格式化成带单位的金额,附ts版代码

    js将大数字金额转换成带单位的数字金额,万,千万,亿, 第一个参数是在转换的数字, 第二个参数是返回的格式 不传第二个参数,返回数字和单位分开的,数组格式,传第二个参数后,返回数组和单位的字符串,这样 ...

最新文章

  1. mysql自动备份脚本,及系统定时备份设置!
  2. hexo 博客框架 可用作知识库
  3. linkText()的用法
  4. 判断、转载-【Cocos2D-X 】初窥门径(8)判断精灵点击-by小雨
  5. mysql grant %_MySQL的Grant命令详解
  6. 二次探测再散列举例_二次探测散列法
  7. 25.C++:最通俗的讲解,什么是面向过程?什么是面向对象?
  8. 你有多了解hybris ?
  9. CentOS系列启动流程和内核原理(5系列,6系列,7系列)
  10. 内核页表隔离(Kernel page-table isolation,KPTI,简称PTI,旧称KAISER)
  11. C++开发工程师进阶路线
  12. 机器学习5-支持向量机
  13. 装箱问题 BPP first fit、best fit、first fit decreasing、best fit decreasing
  14. 僵尸粉检测 php,微信新功能,一键检测你的手机卡不卡,还能查僵尸粉
  15. 区分 WDM驱动和NT驱动(有待继续思考)
  16. 蓝丝雨零基础DNF脚本开发速成系列
  17. python神经网络编程 代码,python神经网络算法代码
  18. javafx 五、网络请求
  19. java截取固定大小图片_JAVA技巧(长字符串按指定长度截取)
  20. 用python搭建 百万答题 、自动百度搜索答案

热门文章

  1. CSS基础知识——常用基础命令
  2. Oracle Exadata一体机简介
  3. Excel高级函数应用总结
  4. JAVA作业 随机抽取
  5. 【图像处理】sobel边缘检测的实现
  6. python 计算变量的IV值
  7. mysql注入转义绕过_SQL注入防御绕过
  8. 通达OA2015版与金蝶K3系统集成方案
  9. 应急指挥调度中心坐席解决方案
  10. QQ音乐自定义音效通用设置