将金额转换为中文大写
将金额转换为中文大写
思路
- 判断符号,0则直接返回
- 数字去掉点
- 00结尾的要加’整’
- 循环,从后面每次取一个数位上的值直到最前面,
- 若是非零则加上对应的数值和单位
- 若是零,判断上一个是否为零,是,则不加’零’,若是个位上的需要加’‘元’若是万,亿,兆则要加上’万,亿,兆’,要排除出现’亿万和兆亿’(数值除以10000)
package com.szhiiso.fomp.common.utils;import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;import javax.swing.plaf.ViewportUI;import org.apache.xalan.templates.ElemAttributeSet;
import org.apache.xmlbeans.impl.xb.xsdschema.Public;
import org.junit.Test;import com.sun.media.jai.iterator.RectIterCSM;/*** 数据处理* * @author hwq* @date 2018年10月10日*/
public class MyDigitUtils {private static final String[] CN_UPPER_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };private static final String[] CN_UPPER_MONETRAY_UNIT = { "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾","佰", "仟", "兆", "拾", "佰", "仟" };/*** 将金额转换为大写中文* * @param money* @return*/public static String number2CNMoneyUnit(double money) {StringBuffer sbBuffer = new StringBuffer();BigDecimal bigDecimalMoney = BigDecimal.valueOf(money);int signum = bigDecimalMoney.signum();if (signum == 0) {return "零元整";}long number = bigDecimalMoney.setScale(2, BigDecimal.ROUND_HALF_UP).abs().movePointRight(2).longValue();int numIndex = 0;int numUnit = 0;boolean getZero = false;if (number % 100 == 0) {sbBuffer.append("整");number=number/100;numIndex = 2;getZero = true;} while (true) {if (number == 0) {break;}numUnit = (int) (number % 10);if (numUnit == 0) {if (getZero) {if (numIndex == 2) {sbBuffer.insert(0, "元");} else if ((numIndex - 2) % 4 == 0 && number % 10000 != 0) {sbBuffer.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);}}else {if(numIndex!=0){//最后一位不加零sbBuffer.insert(0, "零");}getZero = true;} else {sbBuffer.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);sbBuffer.insert(0, CN_UPPER_NUMBER[numUnit]);getZero = false;}number = number / 10;numIndex++;}if (signum < 0) {sbBuffer.insert(0, "负");}return sbBuffer.toString();}
}
测试
public static void main(String[] args) {Random random=new Random();for(int i=0;i<50;i++) {double nextDouble = random.nextDouble()*Math.pow(10,CN_UPPER_MONETRAY_UNIT.length-5);System.out.print(BigDecimal.valueOf(nextDouble)+"----");System.out.println(MyDigitUtils.number2CNMoneyUnit(nextDouble));}
将金额转换为中文大写相关推荐
- 正则也很牛,把阿拉伯数字的金额转换为中文大写数字
using System; using System.Text.RegularExpressions; class Program { // 把阿拉伯数字的金额转换为中文大写数字 static ...
- Java 描述将数字金额转换为中文大写
Java 描述金额转换(数字转换成中文大写) 解题思路:把每一位转换成对应的大写,然后在不足地方补零,最后加上相应单位. 代码如下: import java.util.Scanner; ...
- JS将数字金额转换为中文大写
最近在做一个关于金额的票据显示,有部分需要将数字金额改为中文大写金额,下面给出具体实现的JS var changeMoney = function(n) {var fraction = ['角', ' ...
- 金额转换为中文大写格式
package org.sz.basic; import java.text.DecimalFormat; public class ConvertMoney { private final stat ...
- 阿拉伯数字金额转换为中文大写
function digitUppercase(n) {var fraction = ['角', '分'];var digit = ['零', '壹', '贰', '叁', '肆','伍', '陆', ...
- 将小写金额转换为中文大写
CREATE FUNCTION [dbo].[f_num_chn] (@num numeric(14,2)) RETURNS varchar(100) WITH ENCRYPTION AS BEGIN ...
- Python:阿拉伯数字转换为中文大写数字(金额的读数规则)
萌萌帮班里同学做了一个python的编程作业,正好回顾一下python基础知识,以下源码和思考过程,代码全部原创. IDE:pycharm python版本:python3.7 ''' 实验目的:在银 ...
- 将阿拉伯数字转换为中文大写数字 —— pyhton实现
将阿拉伯数字转换为中文大写数字 -- pyhton实现 在银行的日常业务中,常常需要用到将阿拉伯数字转换为中文大写数字的 功能.这次实验将编写一个程序,将用户输入的阿拉伯数字代表的金额,转换为大写数字 ...
- 小写金额变中文大写和英文方法总结
#region 变量申明 private static readonly String cnNumber = "零壹贰叁肆伍陆柒捌玖"; priva ...
最新文章
- Java 文件上传下载管理器(控制台)
- mysql replication
- JS权威指南阅读笔记
- cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】图像金字塔
- uva 11892 - ENimEN(推理)
- 机器学习 --- 3. 贝叶斯怎么想?(转)
- 硬盘分区故障修复全攻略
- 【学习点滴】游戏后台开发-tx
- linux使用磁盘配额,linux磁盘配额使用
- 记录word的页码问题-页码分节、罗马数字页码
- 201871010126 王亚涛 《面向对象程序设计(java)》 第四周学习总结
- Candence学习篇(4)allegro软件中class 和subclass的概念
- 老鸟程序员才知道的一些事
- MySQL B+树 BTree原理、增删改(详细)
- 【尚硅谷_java基础】十五、网络编程
- js导出科学计数法_怎么让js不自动转换成科学计数法
- CAM 导入.rou钻孔文件时提示No header % found或者显示与实际尺寸偏差大
- 03 HTTP 协议
- VMOS虚拟机与Fiddler免root抓包(超简单解决抓包无网络问题)
- 销售高手的21堂课》 之 《富爸爸财务自由之路》12