注:该代码来自于别人,我引入进来并修改了里面的几个bug.现在写进我的博客里,以便于日后查看,和为其它博友们提供方便

修改bug地方:1.金额为0时,不加整。以前是零元整,现在是零元    2.修改"分", "角", "元","万", "亿","兆"位不会出现零

package com.zbx.bs.common.util;

import java.math.BigDecimal;

/**

* 数字转换为汉语中人民币的大写

*

* @author dean

*/

public class NumberToCN {

/**

* 汉语中数字大写

*/

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 = "零元";

/**

* 把输入的金额转换为汉语中人民币的大写

*

* @param numberOfMoney

* 输入的金额

* @return 对应的汉语大写

*/

public static String number2CNMontrayUnit(BigDecimal numberOfMoney) {

StringBuffer sb = new StringBuffer();

// 返回-1:表示该数小于0 0:表示该数等于0 1:表示该数大于0

int signum = numberOfMoney.signum();

// 零元的情况

if (signum == 0) {

return CN_ZEOR_FULL;

}

// 这里会进行金额的四舍五入

long number = numberOfMoney.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, 11

if (!(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[] args) {

double money = 8880044841.10;

BigDecimal numberOfMoney = new BigDecimal(money);

System.out.println("你输入的金额为:【" + money + "】 #--# [" + NumberToCN.number2CNMontrayUnit(numberOfMoney).toString() + "]");

}

}

java将数字转换成大写_Java中金额数字转换为大写数字相关推荐

  1. java将中文转换成拼音_java实现将汉语转换为拼音功能

    这几天在做项目的时候用到了通过拼音去数据库表里面去模糊查询汉语字段,刚开始的时候感觉特别神奇,查了好多资料,直接去模糊查询是能实现的,但是貌似很复杂.所以最终取了一个比较容易的方案,就是给数据库表里面 ...

  2. html把数字转换成日期,表格中如何把数字改为日期 表格中打数字会变成日期是怎么回事?...

    Excel 表格中如何把数字转换成时间? 如何在EXCEl中把数字变成日期格式 如何将EXCEL中的日期格式转换成数值型格式 学生出生年月原格式为1990-03-20现在想将它变成199003舍掉后面 ...

  3. 怎么把数字替换成空格_Excel中带单位后缀的数字如何计算?

    在日常统计的Excel工作表中一般带了单位的数字是没办法直接进行计算的,需要进行一定的操作才可以转换成可以计算的模式.今天小编来给大家讲解一下具体的操作方法,快来和我一起学习一下吧! 工具/原料 电脑 ...

  4. java将字符转换成拼音_java中将汉字转换成拼音的实现代码

    一:演示: 如在控制台输入:北京欢迎你 打印出来的拼音:bei jing huan ying ni 二:导入要依赖的jar: 汉字转换拼音jar下载 三:代码编写 代码如下: public stati ...

  5. java毫秒值转换成日期_Java学习笔记day08

    Object类 java.lang.Object 类Object是类层次结构的根类 每个类都使用Object作为 超(父)类 所有对象(包括数组)都实现这个类的方法 Object类的toString方 ...

  6. java把汉字转换成拼音_Java实现汉字转换为拼音

    本文的核心代码取自easydozer的blog:http://blog.csdn.net/easydozer/ 代码说明: Java实现汉字转换为拼音的GUI版本. GUI代码部分: /** * @( ...

  7. java date 转换成毫秒_Java程序将Date转换为毫秒

    导入以下包以使用Date类.import java.util.Date; 否创建一个Date对象.Date d = new Date(); 让我们将当前日期转换为毫秒.d.getTime() 以下是一 ...

  8. java 日文全角转半角_java中全角转换为半角的方法

    在获取文本的时候,经常遇到数据格式的问题,需要判断或转换. 本文旨在解决全角符号转换为半角符号的问题. 网上大体有两种方法:转换编码或者替换. 我使用的是转换编码,引用自:http://blog.cs ...

  9. java 将json转换成sql_SQL Server中将查询结果转换为Json格式脚本分享

    脚本源码: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE[dbo].[SerializeJSON]( @Param ...

  10. 在EXCEL中金额小写转换为大写

    在EXCEL中A1为数字格式单元格,在任意单元格内粘贴下面公式即可显示大定金额: IF(A1<=0,,TEXT(INT(A1),"[dbnum2]人民币G/通用格式")&am ...

最新文章

  1. Jquery各版本下载,附Jquery官网下载方法
  2. JS数字转换成货币格式
  3. 机器人核心:感知与规划
  4. 028_jdbc-mysql大文本
  5. $.ajax和$.load的区别
  6. linux ftp 配额 quota,linux – vsftpd中的配额?
  7. Java并发编程高级篇(十):分离任务的执行和结果的处理
  8. 奥鹏C语言专科在线作业答案,电子科大12春《C语言(专科)》在线作业三
  9. 导出oracle数据c#代码,C# 程序导入导出oracle数据库
  10. WebGIS中利用AGS JS+eCharts实现一些数据展示的探索
  11. Eclipse 一直提示 loading descriptor for 的解决方法
  12. java流程图if_if判断流程图怎么画?教你简单制作程序流程图的方法
  13. vmware虚拟机使用教程
  14. 调用阿里API实现图片验证码识别
  15. 定性数据分析中高维列联表分析流程(附R代码)
  16. 【Derivation】 条件数学期望公式泊松分布推导(Poisson distribution)
  17. 解决在浏览器中打开java文件jnlp报错“该文件没有程序与之关联来执行该操作...”
  18. Sechunter移动应用隐私合规检测详解
  19. 倍福CX9020(WINCE 7)使用技巧汇总
  20. 【转】本人常用资源整理(ing...)

热门文章

  1. stm32 c语言 位带,我对STM32所用位带操作宏的超详细剖析、优势分析及应用推广探索研究(持续更新,欢迎讨论交流)...
  2. zcu106 固化_xilinx zcu106 vcu demo
  3. Django搭建后台管理系统
  4. PowerShell,AnkhSVN和Subversion
  5. 数字图像处理:时域、频域和空间域
  6. GUI制作信号分析的频域和时域分析
  7. Android之阿里云推送实现
  8. Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
  9. 日历问题 —— C++
  10. php 2037时间问题