这是一个将阿拉伯数字转人民币大写的工具类, 精确到人民币大写分

package com.client;import java.math.BigDecimal;/*** Class Description : 该类是把阿拉伯数字转换成中文大写的类。* * * * 汉字大写金额数字,一律用正楷字或行书字书写,如壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、圆(元)、* 角、分、零、整(正)等易于辨认、不易涂改的字样。* 不得用一、二(两)、三、四、五、六、七、八、九、十、念、毛、另(或0)等字样代替,不得任意自造简化字。* * 大写金额数字到元或角为止的,在“元”或“角”字之后应写“整”或“正”字;大写金额数字有分的,分字后面不写“整”字。* 大写金额数字前未印有人民币字样的,应加填“人民币”三字,“人民币”三字与金额数字之间不得留有空白。* * 阿拉伯金额数字中间有“0”时,汉字大写金额要写“零”字,如$101.50,汉字大写金额应写成人民币壹佰零壹圆伍角整。* 阿拉伯金额数字中间连续有几个“0”时,汉字大写金额中可以只写一个“零”字,如¥1,004.56,汉字大写金额应写成* 人民币壹仟零肆圆伍角陆分。阿拉伯金额数字元位是“0”,或数字中间连续有几个“0”,元位也是“0”,但角位不是“0”时,* 汉字大写金额可只写一个“零”字,也可不写“零”字,如$1,320.56,汉字大写金额应写成人民币壹仟叁佰贰拾圆零伍* 角陆分,或人民币壹仟叁佰贰拾圆伍角陆分。又如$1,000.56,汉字大写金额应写成人民币壹仟圆零伍角陆分,或人民* 币壹仟圆伍角陆分。* *                                                      摘自《会计人员工作规则》(84)财会16号* * * * */
public class NumberToStringForChineseMoney {static String HanDigiStr[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆","柒", "捌", "玖" };static String HanDiviStr[] = new String[] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟","亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万","拾", "佰", "仟" };/*** 负责把小数点前面的数转换为大写中文* * 输入字符串必须正整数,只允许前面有空格(必须右对齐),不允许前面有零* * @param numberStr* @return*/private static String positiveIntegerToHanString(String numberStr) {String RMBStr = "";boolean lastzero = false;boolean hasvalue = false; // 亿、万进位前有数值标记int len, n;len = numberStr.length();if (len > 15)return "金额过大!";for (int i = len - 1; i >= 0; i--) {if (numberStr.charAt(len - i - 1) == ' ')continue;n = numberStr.charAt(len - i - 1) - '0';if (n < 0 || n > 9)return "金额含非数字字符!";if (n != 0) {if (lastzero)RMBStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零// 除了亿万前的零不带到后面// if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) //// 如十进位前有零也不发壹音用此行
//              if (!(n == 1 && (i % 4) == 1 && i == len - 1)) // 十进位处于第一位不发壹音RMBStr += HanDigiStr[n];RMBStr += HanDiviStr[i]; // 非零值后加进位,个位为空hasvalue = true; // 置万进位前有值标记} else {if ((i % 8) == 0 || ((i % 8) == 4 && hasvalue)) // 亿万之间必须有非零值方显示万RMBStr += HanDiviStr[i]; // “亿”或“万”}if (i % 8 == 0)hasvalue = false; // 万进位前有值标记逢亿复位lastzero = (n == 0) && (i % 4 != 0);}if (RMBStr.length() == 0)return HanDigiStr[0]; // 输入空字符或"0",返回"零"return RMBStr;}/*** 输入double型数转换为大写中文* * @param doubleValue* @return 大写中文*/public static String getChineseMoneyStringForDoubleVal(double doubleValue) {String SignStr = "";String TailStr = "";long fraction, integer;int jiao, fen;if (doubleValue < 0) {doubleValue = -doubleValue;SignStr = "负";}if (doubleValue > 99999999999999.999|| doubleValue < -99999999999999.999)return "金额数值位数过大!";// 四舍五入到分long temp = Math.round(doubleValue * 100);integer = temp / 100;fraction = temp % 100;jiao = (int) fraction / 10;fen = (int) fraction % 10;if (jiao == 0 && fen == 0) {TailStr = "整";} else {TailStr = HanDigiStr[jiao];if (jiao != 0)TailStr += "角";if (integer == 0 && jiao == 0) // 零圆后不写零几分TailStr = "";if (fen != 0)TailStr += HanDigiStr[fen] + "分";}return (doubleValue>=1)?(SignStr + positiveIntegerToHanString(String.valueOf(integer))+ "圆" + TailStr):TailStr;}/*** 输入BigDecimal型数转换为大写中文* * 精度取决于BigDecimal 的 public double doubleValue() 方法: 是基本收缩转换。 如果此 BigDecimal* 的数量太大而不能表示为 double,则将其适当地转换为 Double.NEGATIVE_INFINITY 或* Double.POSITIVE_INFINITY。 即使在返回值为有限值的情况下,此转换也可能丢失关于 BigDecimal 值精度的信息。* * @param bigDecimalVal* @return 大写中文*/public static String getChineseMoneyStringForBigDecimal(BigDecimal bigDecimalVal) {return getChineseMoneyStringForDoubleVal(bigDecimalVal.doubleValue());}public static void main(String[] args) {System.out.println(getChineseMoneyStringForBigDecimal(new BigDecimal(23432.234)));}
}

运行程序,输出结果如下:
贰万叁仟肆佰叁拾贰圆贰角叁分

java实现阿拉伯数字转人民币大写(精确到分)相关推荐

  1. 帆软函数:阿拉伯数字转中文、阿拉伯数字转人民币大写

    一.阿拉伯数字转人民币大写 CNMONEY(number,unit) number:数字. unit:单位,"s","b","q",&quo ...

  2. 阿拉伯数字对应人民币大写表

    阿拉伯数字对应人民币大写对照表如下: 来源: http://www.rmbdx.com

  3. python实现人民币大写转换

    问题描述: 银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序. 在中文大写方式中,0到10以及100.1000.10000被依次表示为: 零 壹 贰 ...

  4. python 作业2:人民币大写转换问题

    题目描述: 银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序. 在中文大写方式中,0到10以及100.1000.10000被依次表示为: 零 壹 贰 ...

  5. 人民币大写转阿拉伯数字的java实现

    人民币大写转阿拉伯数字的工具类,简单粗暴的替换就完事了 import java.util.HashMap; import java.util.Map;public class ValueConvert ...

  6. 根据人民币大写规则写的java工具类

    需求场景:传入一个数字,把它转成人民币大写. 先看下人民币大写规则: 一.人民币大写金额数字到"元"为止的.在"元"之后.应写"整"(或&q ...

  7. 人民币转换(阿拉伯数字转为中文大写的人民币格式)

    人民币转换 1.中文大写金额数字前应标明"人民币"字样.中文大写金额数字应用壹.贰.叁.肆.伍.陆.柒.捌.玖.拾.佰.仟.万.亿.元.角.分.零.整等字样填写. 2.中文大写金额 ...

  8. java中人民币的符号怎么打_Java学习笔记---字符串操作(人民币大写转换的实现)...

    向开始学习语言的的同学们推荐下,如果你想学习语言的某个特性,比方说数据库编程,或者网络编程,最好找一个实用的例子,然后不懂的去翻书,去查资料,这样目的性就很强了,个人感觉比对着语法书敲上面的例子效率要 ...

  9. java方法转换大写日期及人民币大写转换方式 .txt

    java方法转换大写日期及人民币大写转换方式 2012-03-02 14:38:03| 分类: java |字号 订阅 /** * 阿拉伯数字与中文数字(大小写)之间的转换 * */ import j ...

最新文章

  1. 计算机的云是什么意思_高考倒计时!现在学什么专业好?答案是……
  2. 5G服务可以解决的4个企业WAN挑战 - vecloud
  3. 信息学奥赛C++语言: 判决素数个数
  4. c语言单词的一个字母变换,c语言:输入一行英文字符串,把每个单词第一个字母变为大写,输出修改后的字符串知道...
  5. 设计模式16_策略模式
  6. Windows下的脚本在Linux中运行乱码问题
  7. 【ARM】2410裸机系列-中断处理
  8. 如何保证kafka消息的可靠性传递?
  9. C语言malloc的用法和意义
  10. matlab z统计量,z统计量(z统计量与t统计量)
  11. 键盘怎么按出计算机,怎么在电脑键盘上打出艾特@键? 原来是这样的
  12. MacOS深色模式下微信文章页面背景变为黑色问题的解决
  13. RFID固定资产管理--智能化资产管理--RFID资产管理--新导智能
  14. 基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)
  15. 爬取微博热点评论用户ID--简易版本
  16. 产业创新新主流,讯众股份上榜创业黑马“新一亿中流”企业top100
  17. 征途手游2新开区服务器维护多久,征途2手游新区开服表 征途2手游新区开服时间详解[图]...
  18. 斗地主算法的设计与实现 五 --洗牌和发牌
  19. 复指数与高斯函数乘积的傅里叶变换_测量波函数
  20. pdo mysql 建库_pdo 创建数据库

热门文章

  1. 【研讨会现场】广州天嵌科技受邀参加2014年TI9月深圳研讨会
  2. 推荐系统常用数据集介绍
  3. 深度学习入门(一)快速建立自己的图片数据集
  4. 3735平板装win和linux双系统,流行的就一定好?浅谈双系统平板的利与弊
  5. 直流有刷电机编码器测速基于STM32F302R8+X-NUCLEO-IHM07M1
  6. boost circular_buffer
  7. Unity:看不到Flash未来 终止支持Flash
  8. android 字符串中截取,【安卓按键精灵】几种字符串提取的方法(源码)
  9. 关于会员积分体系的产品设计
  10. 超高频UHF RFID读写模块R200开发测试