在工作中因为报表需要,自己写了个简单的金额中文大写转换,权当训练一下思维。当然也有代码优化的空间,欢迎指正。
/*
* 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实现阿拉伯数字金额转汉语大写
阿拉伯数字转大写金额+大写金额转阿拉伯数字阿拉伯数字转大写金额+大写金额转阿拉伯数字
js (非金额) 把阿拉伯数字转成中文大写
本例子将数字以汉字中的大写数字表示形式显示在页面中。例如“78.79”转换城”“柒拾捌元柒角玖分
1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...
用java实现将阿拉伯数字转换为金额的汉字大写
最好放在公共方法里,以便调用,定义String 类型接受返回的金额,调用参数为需要传入的金额
将阿拉伯数字金额转成中文大写 "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"......
修改了输入小数转换一个错误,修正窗体可调整和图标等
mysql 函数,可以将数字转换为中文大写形式。大写数字是中国特有的数字书写方式,利用与数字同音的汉字取代数字,以防止数目被涂改。 据考证,大写数字最早是由武则天发明,后经朱元璋改进完善。
Android中数字转中文,金额转大写源码,支持口语化转换。
数字转换成金额大写,实例,文本框输入数字,标签显示大写金额
将数字转换成大写的汉字或者大写的金额的例子。复制过去就能用,里边有main方法说明,复制一个new对象就可以了
佛慈悲,应要求给整个下载在我的资源中,其中包含自学习桌面编程以来所找的资料及未完成的部分学习代码,从未完成的开始转入了另一个急需开发软件的研发工作,所以没时间来作这个的继续,打包原封不动提供学习了. ...
*数字金额转换成中文大写金额的函数 *String Int $num 要转换的小写数字或小写字符串 *return 大写字母 *小数位为两位 **/ function num_to_rmb($num){ $c1 = "零壹贰叁肆伍陆柒捌玖"; $c2 = "分角元拾佰仟万拾佰...
阿拉伯数字 转 中文大写 金额转换 金额转换 代码!!
金额阿拉伯小写数字转换成大写
读入一串阿拉伯数字,将其转化为中文金额的大写方式。这是老师布置的一题回家作业。花了一天时间完成的。虽然代码比较烦琐。但是所有的几率都考虑到了。
用java代码 实现金额阿拉伯数字 转成 中文汉字大写形式
可将任意阿拉伯数字金额等转换成汉字大写“壹、贰”