如下案例:(通过一串数字获得人名币大写形式)

请输入你的金额:

1283920223

壹十贰亿捌千叁百玖十贰万零贰百贰十叁元整

代码如下:

import java.math.BigDecimal;
  
 public class Zhuanhuan {
    /**
      * 汉语中数字大写
     */
 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 = "零元" + CN_FULL;
  
     /**
      * 把输入的金额转换为汉语中人民币的大写
       * 
      * @param numberOfMoney
       *            输入的金额
      * @return 对应的汉语大写
       */
     public static String number2CNMontrayUnit(BigDecimal numberOfMoney) {
          StringBuffer sb = new StringBuffer();
          // -1, 0, or 1 as the value of this BigDecimal is negative, zero, or
         // positive.
         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 (!(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);
         }
         // 输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整
         if (!(scale > 0)) {
             sb.append(CN_FULL);
         }
         return sb.toString();
     }

public static void main(String[] args) {
         double money = 100.01;
         BigDecimal numberOfMoney = new BigDecimal(money);
         String s = Zhuanhuan.number2CNMontrayUnit(numberOfMoney);
         System.out.println("你输入的金额为:"+ money +"  [" +s.toString()+"]");
     }
 }

数字转人名币大写形式相关推荐

  1. java七位小数_要一个 用 Java 实现 数字转人名币大写 精度到小数点后七位

    [Java] 纯文本查看 复制代码import java.text.DecimalFormat; import java.util.Scanner; /** * 金额转换 */ public clas ...

  2. 转换阿拉伯数字为人名币大写

    转换阿拉伯数字为人名币大写 这是本周面试的一道题,当时在现场没做出来~~~,回来之后,三下两除二就弄出来了,尬!!! 先贴下代码把:(如有错或者好的解决方案,还望大佬提出,小弟不胜感激

  3. 【码蹄集新手村600题】人名币大写数字

    题目链接: 码蹄集 (matiji.net) 解题思路: 利用 char 数组存储输入的人名币数额, 首先判断所输入的数是否为俩位数, 如果是俩位数的话, 先把十位数字的大写写出来, 然后再加一个 & ...

  4. 将数字转换成中文大写的算法

    //名称:ConvertSignCap   //参数:number   //返回:CapNumber   //描述:将传入的单个数字转换成中文大写形式   //创建人:刘权 2004-11-16    ...

  5. 数字人民币问答-什么是数字人名币?

    数字人民币问答是结合生活实际,汇总遇到的问题,以及网上其他人遇到的问题,尝试提供简洁准确的答案. e-CNY-QA Github 地址:Fenguoz/e-CNY-QA 什么是数字人名币? 数字人民币 ...

  6. 大写人命币工具类:获取大写的人名币的金额,单位精确到分

    public class PriceUtil {private static final String[] CN_UPPER_NUMBER = {"零", "壹" ...

  7. 将数字转换成中文金额的大写形式

    package com.unteck.fms.web.businessdata.controller; import org.springframework.beans.factory.annotat ...

  8. 网上银行、数字人名币方案、二代征信、涉案查控方案介绍

    网上银行.数字人名币方案.二代征信介绍 一.密码学知识回顾 (一)密钥体系 (二)PKI体系 1. 概念 2. PKI系统基本构成 (三)密码学 1. 国际算法 2. 国密算法 3. 签名验签 4. ...

  9. 大小写转化php,怎样用PHP做出人名币大小写的方法转换

    今天给大家分享的代码是怎样用PHP做出人名币的大小写转换,下面是实战案例,需要的朋友可以参考一下.<?php header("charset=utf-8;"); functi ...

最新文章

  1. tomcat优化设置
  2. python有哪些作用-python的函数有什么作用
  3. 安卓:安卓工程构建及第一个安卓程序运行
  4. 帝国CMS7.5仿金色财经整站源码+手机端+会员中心+投稿-财经综合门户
  5. 深入比特币原理(二)——比特币密钥地址生成
  6. JAVA(1)-----JAVA基础知识
  7. 回调函数原理与Python实现
  8. zk 加载 html 标签,HTML字符实体——ZK支持字符
  9. 学习英文之社区,博客及源码 转载
  10. C语言程序——如何是使用TurboC2编程调试
  11. 【电力拖动自动控制系统】感应/异步电机动态模型完全手把手推导
  12. 修改 Ubuntu 20.04 的登录界面背景
  13. codesys工控机_CODESYS在系统集成项目中的运用案例
  14. 关于使用HTML或JS实现页面重定向的方法
  15. 搜索引擎优化核心关键词策略
  16. 写在觉醒时 埋葬过去的堕落
  17. 关于一张出库单开具了多张发票的错误处理
  18. python是什么?为何被称为胶水语言?
  19. kubernetes—ConfigMap 与 Secret
  20. 弘辽科技:淘宝商品标题怎么写?如何选词?

热门文章

  1. echarts 三种数据双y轴显示 (文末附带完整代码)
  2. 苹果cms安装mysql检测失败_苹果cms安装失败的几种解决方法
  3. 煤炭企业管理中项目化管理的应用探寻
  4. Linux命令基础15-top命令
  5. DeaDBeeF MPRIS插件 v2.1
  6. vue页面导出pdf
  7. owin Oauth
  8. 服务器商店无限量指令,我的世界服务器商店指令怎么用 我的世界商店指令代码介绍...
  9. AG9310设计USB TYPEC 转HDMI+U2+5V慢充方案设计|AG9310拓展坞方案电路|TYPE-C dongle设计资料
  10. 亲测有效:用手机扫描HBuilderX 内置浏览器的二维码,电脑web浏览器可以显示,但在手机预览打不开。