import java.math.BigDecimal;/*** Class Description : 该类是把阿拉伯数字转换成中文大写的类。* <p>* <p>* <p>* 汉字大写金额数字,一律用正楷字或行书字书写,如壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、圆(元)、* 角、分、零、整(正)等易于辨认、不易涂改的字样。* 不得用一、二(两)、三、四、五、六、七、八、九、十、念、毛、另(或0)等字样代替,不得任意自造简化字。* <p>* 大写金额数字到元或角为止的,在“元”或“角”字之后应写“整”或“正”字;大写金额数字有分的,分字后面不写“整”字。* 大写金额数字前未印有人民币字样的,应加填“人民币”三字,“人民币”三字与金额数字之间不得留有空白。* <p>* 阿拉伯金额数字中间有“0”时,汉字大写金额要写“零”字,如$101.50,汉字大写金额应写成人民币壹佰零壹圆伍角整。* 阿拉伯金额数字中间连续有几个“0”时,汉字大写金额中可以只写一个“零”字,如¥1,004.56,汉字大写金额应写成* 人民币壹仟零肆圆伍角陆分。阿拉伯金额数字元位是“0”,或数字中间连续有几个“0”,元位也是“0”,但角位不是“0”时,* 汉字大写金额可只写一个“零”字,也可不写“零”字,如$1,320.56,汉字大写金额应写成人民币壹仟叁佰贰拾圆零伍* 角陆分,或人民币壹仟叁佰贰拾圆伍角陆分。又如$1,000.56,汉字大写金额应写成人民币壹仟圆零伍角陆分,或人民* 币壹仟圆伍角陆分。* <p>* 摘自《会计人员工作规则》(84)财会16号*/
public class NumberToChineseUtil {private final static String HanDigiStr[] = new String[]{"零", "壹", "贰", "叁", "肆", "伍", "陆","柒", "捌", "玖"};private final 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(300).multiply(new BigDecimal(10000))));}

java人民币数字转换中文大写(精确到人民币大写分)相关推荐

  1. java实现人民币数字转换中文大写的工具实例代码demo分享

    原文:java实现人民币数字转换中文大写的工具实例代码demo分享 http://www.zuidaima.com/share/1816208858221568.htm 刚好在项目里面用到了数字转化为 ...

  2. java数字转换中文

    阿拉伯数字转换中文 转换结果: 23 转成 二十三 2.3 转成 二点三 import java.math.BigDecimal;/*** 数字转换中文** @author lbx*/ public ...

  3. php人民币转换,人民币数字转中文币制

    [php]代码库/** * 人民币数字转中文币制 * @param string $data 待转换的数字 * @return string 返回转换后的中文数字 */ function number ...

  4. [原创]数字转换中文大写金额

    [原创]数字转换中文大写金额 程序需要:2控件: text1 command1 command1下代码: On Error Resume Next If InStr(Text1, ".&qu ...

  5. 金额转换(数字转换中文老写)

    金额转换(数字转换中文老写) /*** @auther 倪万佳* @date 2018/10/19 23:08*/ public class RenMingBi {private static fin ...

  6. java实现数字转中文大写数字

    import java.util.HashMap; public class dds { /** *  * 数字转中文 *  * @param list *  * @return */ private ...

  7. java实现数字转换人民币中文大写工具

    业务场景: 1.在人事业务系统开发的报表打印文书时经常需要将人民币数值转换为大写, 所以用java写了一个通用的大写转换函数. 为了更加方便调用函数的参数使用字符串类型.例如:825.45 转换后:捌 ...

  8. ABAP 数字转换中文大写数字的方法

    写了2种转换的方式.显示XX元整,XX元角XX分 data:I_JE TYPE BSEG-DMBTR VALUE '1234.891'. data:e_JE TYPE CHAR100.DATA:s_z ...

  9. java 数字转换中文_数字转换成中文 java实现

    /** * * 主要思想,根据数字按四位划分为一级,第一级段位为个.十.百.千,第二级段位为万.亿.万亿.然后根据当前数所属位置来追加所属段数 * * * @author ZLi 2017-9-12 ...

  10. java读法,Java 把数字转换为中文读法

    /** *输入一串数字,输出这串数字对应的中文读法 * 如: * 输入:832900180 输出:八亿三千二百九十万一百八十 * * 思路:1.中文读法都是4个一串,所以我用a和b分别来表示这是哪一段 ...

最新文章

  1. css,js缓存,不能立即响应
  2. basename函数使用
  3. Spring Cache 缺陷,我好像有解决方案了
  4. UVA10474 Where is the Marble?
  5. @CachePut(与@Cacheable的差异)@CacheEvict
  6. Eclipse连接数据库MySQL以及一些有关数据库的知识
  7. html5开发app的缺点,全解HTML 5在移动Web应用的优劣势
  8. 不加载执行js_前端性能优化:preload 预加载页面资源
  9. ios 裁剪圆形头像_IOS_iOS如何裁剪圆形头像,本文实例为大家介绍了iOS裁剪 - phpStudy...
  10. java有道翻译_Java 调用 有道翻译API
  11. 浅析 JNDI / DataSource / ConnectionPool 三者
  12. 关于男生追女生的数学模型【转王博】
  13. Vue.js实际开发案例(不断整理中...)
  14. x79服务器主板装系统,【小白经历分享】华南X79 E5 2670+470D 成功装上双系统 【win10+Sierra10.12.6】...
  15. 反向代理和正向代理的区别介绍
  16. dva的简单使用(一)
  17. 有关Amazon站内信邮件类别处理
  18. Xmind8 (update8)破解教程
  19. sudo apt-get install build-essential的作用
  20. 树莓派指定挂载点挂载移动硬盘

热门文章

  1. php 写ps功能,ps的作用是什么
  2. curl命令操作ElasticSearch
  3. 自我觉察-4:觉察“不浪费食物”和“胃过饱食”的信念
  4. pandas用in筛选数据
  5. 工厂设备状态监控可视化解决方案
  6. ThingsBoard设备在线状态-active服务端属性分析
  7. docker-comose入门到实战
  8. 计算机组成原理期末复习
  9. 22个月无休,华为36岁工程师在肯尼亚过劳猝死!
  10. C语言入门——求n的阶乘