在工作中因为报表需要,自己写了个简单的金额中文大写转换,权当训练一下思维。当然也有代码优化的空间,欢迎指正。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.bestway.jptds.client.common;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Map;
/**
* 将阿拉伯数字金额转换成中文大写数字金额的转换类
* @author yzy
*/
public class ConvertToCNMoney {
/**
* 将阿拉伯数字金额转换成中文大写数字金额
* @param money
* @return
*/
public static String toCNMoney(double money) {
//转换成指定格式的数字
NumberFormat fmt = NumberFormat.getInstance();
fmt.setMaximumFractionDigits(2);//两位小数
fmt.setRoundingMode(RoundingMode.HALF_UP);
fmt.setGroupingUsed(false);//不要千分号
money = Double.valueOf(fmt.format(money));
Map<Integer, String> numbersMap = new HashMap<Integer, String>(10);
String[] section = {"", "萬", "億", "兆"};//拆分为四大块,精确到万亿位,即兆
// String[] positions = {"拾", "佰", "仟"};
String[] numbers = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
for (int i = 0; i < numbers.length; i++) {
numbersMap.put(i, numbers[i]);
}
String result = "";
//1.处理小数位(如果有)
if (fmt.format(money).contains(".")) {
int remainder = (int) ((money * 100) % 100);//取余
int a = remainder / 10;
if (a != 0) {
result = numbersMap.get(a) + "角";
}
int b = remainder % 10;
if (b != 0) {
if (a == 0) {
result += numbersMap.get(0) + numbersMap.get(b) + "分";//处理特殊情况,如2.05(贰圆零伍分)
} else {
result += numbersMap.get(b) + "分";
}
}
}
//2.处理整数位
long total = (long) (money * 100 / 100);//取整
if (total == 0) {
return result.equals("") ? (numbersMap.get(0) + "圆") : result;//少于1元
}
int j = 0;
String tempResult = "";
do {
//每次处理四位数
long t = (total % 10000);
String str = ConvertToCNMoney.thousandToUpperCase((int) t, numbersMap, null);
total = total / 10000;
if (total != 0 && t > 0 && t < 1000) {
str = numbersMap.get(0) + str;//如果每次处理之后还有万位且前次处理的四位取余t(0<t<1000),则前面应补零
}
tempResult = str + section[j] + tempResult;
j++;
} while (total != 0);
//3.最后别忘了金额单位
result = tempResult + "圆" + result;
return result;
}
/**
* 处理千位以内阿拉伯数字金额
* @param number
* @param numbersMap
* @param result
* @return
*/
private static String thousandToUpperCase(int number, Map<Integer, String> numbersMap, String result) {
result = result == null ? "" : result;
if (number < 10) {
return number == 0 ? result : (result + numbersMap.get(number));//取出个位
}
if (number < 100) {
result = result + numbersMap.get(number / 10) + "拾";//取出十位
return thousandToUpperCase(number % 10, numbersMap, result);
}
if (number < 1000) {
result = result + numbersMap.get(number / 100) + "佰";//取出百位
//处理特殊情况,如201
if (0 < number % 100 && number % 100 < 10) {
result += numbersMap.get(0);//加个零
}
return thousandToUpperCase(number % 100, numbersMap, result);
}
if (number < 10000) {
result = result + numbersMap.get(number / 1000) + "仟";//取出千位
//处理特殊情况,如2001,2011
if (0 < number % 1000 && number % 1000 < 100) {
result += numbersMap.get(0);//加个零
}
return thousandToUpperCase(number % 1000, numbersMap, result);
}
return result;
}
}
分享到:
相关推荐
"JAVA实现阿拉伯数字金额转汉语大写" JAVA实现阿拉伯数字金额转汉语大写是指使用JAVA语言将阿拉伯数字金额转换为汉语大写格式的过程。该过程主要涉及到数字金额的处理和汉语大写格式的转换。 在该过程中,需要定义...
这样,我们就可以通过调用JavaBean的`toChinese()`方法,将任何阿拉伯数字金额转换为大写汉字表示。 在实际应用中,这个功能可能需要处理更复杂的情况,比如负数、零、以及千位分隔符等。可以进一步扩展`...
在IT领域,尤其是在财务软件开发或数据处理中,经常需要将阿拉伯数字金额转换为中文大写,以便在财务报表、发票或合同中清晰准确地表示金额。这是因为中文大写数字在金融交易中能减少因书写错误导致的混淆,增强财务...
1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...
这是一个可以将阿拉伯数字金额转换为中文大写金额的类,vb.net可用
根据提供的文件信息,我们可以深入探讨如何使用JavaScript将阿拉伯数字转换为中文大写,尤其是在非金额场景下的应用。此转换在日常编程中具有广泛的应用场景,例如用于生成合同文本中的日期等。 ### 核心概念 ####...
首先,数字转中文主要是将阿拉伯数字(如1、2、3等)转换成中文数字(如一、二、三等)。在Java或Kotlin中,我们可以创建一个Map,将数字与对应的中文字符映射起来,然后通过遍历数字字符串并查找对应的中文字符来...
本文将深入探讨如何使用Java来实现阿拉伯数字到金额汉字大写的转换。 首先,我们需要了解金额汉字大写的基本规则。在中国,金额的汉字大写有特定的规则,例如1到10的汉字大写分别是壹、贰、叁、肆、伍、陆、柒、捌...
一、阿拉伯数字转大写金额 1. **基本概念**: - 阿拉伯数字:0, 1, 2, 3, 4, 5, 6, 7, 8, 9。 - 大写金额:零,壹,贰,叁,肆,伍,陆,柒,捌,玖。 2. **转换规则**: - 阿拉伯数字1到9对应的大写金额分别为...
SQL Server 阿拉伯数字转大写中文存储过程 SQL Server 是一个功能强大且广泛应用的关系数据库管理系统,而阿拉伯数字转大写中文是一个常见的需求,例如,在财务报表、发票printing等应用场景中,需要将阿拉伯数字...
mysql 函数,可以将数字转换为中文大写形式。大写数字是中国特有的数字书写方式,利用与数字同音的汉字取代数字,以防止数目被涂改。 据考证,大写数字最早是由武则天发明,后经朱元璋改进完善。
最好放在公共方法里,以便调用,定义String 类型接受返回的金额,调用参数为需要传入的金额
Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字金额到中文大写字符的转换的需求 在实际应用中...
在中文环境中,将阿拉伯数字转换为大写汉字是一项非常实用的功能,尤其是在财务、银行系统等需要将金额以大写形式显示的场合。例如,当需要在支票或发票上填写金额时,通常会使用大写汉字来表示具体的数值,以此防止...
在本文中,我们将深入探讨如何使用C#编程语言创建一个窗体应用程序,该程序能够将输入的阿拉伯数字转换为中文大写。这个功能在财务报表、发票和其他需要以中文大写表示金额的场合非常有用。 首先,我们看到程序的...
总的来说,数字转中文大写金额在Delphi中是一个实用的功能,需要对Delphi语言有良好的掌握,同时也需要熟悉财务领域的规则。通过学习和实践,不仅可以提升编程技巧,还能加深对财务规范的理解。
阿拉伯数字(1、2、3等)是我们日常使用的数字系统,但在正式的会计文档中,通常需要将这些数字转换为中文大写(壹、贰、叁等),以防止篡改和提高审计准确性。在编程领域,尤其是使用Visual Basic (VB) 这样的语言...
将数字转换成大写的汉字或者大写的金额的例子。复制过去就能用,里边有main方法说明,复制一个new对象就可以了
Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...
在Java编程中,将阿拉伯数字转化为中文金额大写是一项常见的任务,特别是在财务系统或报表生成中。这个题目要求实现一个程序,能够读取输入的阿拉伯数字字符串,然后将其转换为符合中国会计规范的中文大写金额表示。...