数字转人名币大写形式
如下案例:(通过一串数字获得人名币大写形式)
请输入你的金额:
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()+"]");
}
}
数字转人名币大写形式相关推荐
- java七位小数_要一个 用 Java 实现 数字转人名币大写 精度到小数点后七位
[Java] 纯文本查看 复制代码import java.text.DecimalFormat; import java.util.Scanner; /** * 金额转换 */ public clas ...
- 转换阿拉伯数字为人名币大写
转换阿拉伯数字为人名币大写 这是本周面试的一道题,当时在现场没做出来~~~,回来之后,三下两除二就弄出来了,尬!!! 先贴下代码把:(如有错或者好的解决方案,还望大佬提出,小弟不胜感激
- 【码蹄集新手村600题】人名币大写数字
题目链接: 码蹄集 (matiji.net) 解题思路: 利用 char 数组存储输入的人名币数额, 首先判断所输入的数是否为俩位数, 如果是俩位数的话, 先把十位数字的大写写出来, 然后再加一个 & ...
- 将数字转换成中文大写的算法
//名称:ConvertSignCap //参数:number //返回:CapNumber //描述:将传入的单个数字转换成中文大写形式 //创建人:刘权 2004-11-16 ...
- 数字人民币问答-什么是数字人名币?
数字人民币问答是结合生活实际,汇总遇到的问题,以及网上其他人遇到的问题,尝试提供简洁准确的答案. e-CNY-QA Github 地址:Fenguoz/e-CNY-QA 什么是数字人名币? 数字人民币 ...
- 大写人命币工具类:获取大写的人名币的金额,单位精确到分
public class PriceUtil {private static final String[] CN_UPPER_NUMBER = {"零", "壹" ...
- 将数字转换成中文金额的大写形式
package com.unteck.fms.web.businessdata.controller; import org.springframework.beans.factory.annotat ...
- 网上银行、数字人名币方案、二代征信、涉案查控方案介绍
网上银行.数字人名币方案.二代征信介绍 一.密码学知识回顾 (一)密钥体系 (二)PKI体系 1. 概念 2. PKI系统基本构成 (三)密码学 1. 国际算法 2. 国密算法 3. 签名验签 4. ...
- 大小写转化php,怎样用PHP做出人名币大小写的方法转换
今天给大家分享的代码是怎样用PHP做出人名币的大小写转换,下面是实战案例,需要的朋友可以参考一下.<?php header("charset=utf-8;"); functi ...
最新文章
- tomcat优化设置
- python有哪些作用-python的函数有什么作用
- 安卓:安卓工程构建及第一个安卓程序运行
- 帝国CMS7.5仿金色财经整站源码+手机端+会员中心+投稿-财经综合门户
- 深入比特币原理(二)——比特币密钥地址生成
- JAVA(1)-----JAVA基础知识
- 回调函数原理与Python实现
- zk 加载 html 标签,HTML字符实体——ZK支持字符
- 学习英文之社区,博客及源码 转载
- C语言程序——如何是使用TurboC2编程调试
- 【电力拖动自动控制系统】感应/异步电机动态模型完全手把手推导
- 修改 Ubuntu 20.04 的登录界面背景
- codesys工控机_CODESYS在系统集成项目中的运用案例
- 关于使用HTML或JS实现页面重定向的方法
- 搜索引擎优化核心关键词策略
- 写在觉醒时 埋葬过去的堕落
- 关于一张出库单开具了多张发票的错误处理
- python是什么?为何被称为胶水语言?
- kubernetes—ConfigMap 与 Secret
- 弘辽科技:淘宝商品标题怎么写?如何选词?
热门文章
- echarts 三种数据双y轴显示 (文末附带完整代码)
- 苹果cms安装mysql检测失败_苹果cms安装失败的几种解决方法
- 煤炭企业管理中项目化管理的应用探寻
- Linux命令基础15-top命令
- DeaDBeeF MPRIS插件 v2.1
- vue页面导出pdf
- owin Oauth
- 服务器商店无限量指令,我的世界服务器商店指令怎么用 我的世界商店指令代码介绍...
- AG9310设计USB TYPEC 转HDMI+U2+5V慢充方案设计|AG9310拓展坞方案电路|TYPE-C dongle设计资料
- 亲测有效:用手机扫描HBuilderX 内置浏览器的二维码,电脑web浏览器可以显示,但在手机预览打不开。