class MoneyFormat{
private final String [] pattern ={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private final String [] cPattern ={"","拾","佰","仟","万","拾","佰","仟","亿"};
private final String [] cfPattern = {"","角","分"};
private final String ZEOR = "零";
public MoneyFormat(){
System.out.println("run...");
}
public String format(String moneyString){
int dotPoint = moneyString.indexOf("."); //判断是否为小数
String moneyStr;
if(dotPoint != -1){
moneyStr = moneyString.substring(0,moneyString.indexOf("."));
}
else{
moneyStr = moneyString;
}
StringBuffer fraction = null; //小数部分的处理,以及最后的yuan.
StringBuffer ms = new StringBuffer();
for(int i = 0;i < moneyStr.length();i++){
ms.append(pattern[moneyStr.charAt(i) - 48]); //按数组的编号加入对应大写汉字
}
int cpCursor = 1;
for(int j = moneyStr.length() - 1;j > 0;j--){
ms.insert(j,cPattern[cpCursor]); //在j之后加字符,不影响j对原字符串的相对位置
//只是moneyStr.length()不断增加
//insert(j,"string")就在j位置处插入,j=0时为第一位
cpCursor = cpCursor == 8?1:cpCursor + 1; //亿位之后重新循环
}
while(ms.indexOf("零拾") != -1){ //当十位为零时用一个"零"代替"零拾"
//replace的起始于终止位置
ms.replace(ms.indexOf("零拾"),ms.indexOf("零拾") + 2,ZEOR);
}
while(ms.indexOf("零佰") != -1){ //当百位为零时,同理
ms.replace(ms.indexOf("零佰"),ms.indexOf("零佰") + 2,ZEOR);
}
while(ms.indexOf("零仟") != -1){ //同理
ms.replace(ms.indexOf("零仟"),ms.indexOf("零仟") + 2,ZEOR);
}
while(ms.indexOf("零万") != -1){ //万需保留,中文习惯
ms.replace(ms.indexOf("零万"),ms.indexOf("零万") + 2,"万");
}
while(ms.indexOf("零亿") != -1){ //同上
ms.replace(ms.indexOf("零亿"),ms.indexOf("零亿") + 2,"亿");
}
while(ms.indexOf("零零") != -1){//有连续数位出现零,即有以下情况,此时根据习惯保留一个零即可
ms.replace(ms.indexOf("零零"),ms.indexOf("零零") + 2,ZEOR);
}
while(ms.indexOf("亿万") != -1){ //特殊情况,如:100000000,根据习惯保留高位
ms.replace(ms.indexOf("亿万"),ms.indexOf("亿万") + 2,"亿");
}
while(ms.lastIndexOf("零") == ms.length()-1){ //当结尾为零j,不必显示,经过处理也只可能出现一个零
if(ms.indexOf("零") == -1){
ms.delete(ms.lastIndexOf("零"),ms.lastIndexOf("零") + 1);
}else{
break;
}
}
int end;
if((dotPoint = moneyString.indexOf(".")) != -1 ){ //是小数的进入
String fs = moneyString.substring(dotPoint + 1,moneyString.length());
if(fs.indexOf("00") == -1 || fs.indexOf("00") >= 2){//若前两位小数全为零,则跳过操作
end = fs.length() > 2?2:fs.length(); //仅保留两位小数
fraction = new StringBuffer(fs.substring(0,end));
for(int j = 0;j < fraction.length();j++){
fraction.replace(j,j+1,this.pattern[fraction.charAt(j) - 48]); //替换大写汉字
}
for(int i = fraction.length();i > 0;i--){ //插入中文标识
fraction.insert(i,cfPattern[i]);
}
fraction.insert(0,"元"); //为整数部分添加标识
}
else{
fraction = new StringBuffer("元整");
}
}
else{
fraction = new StringBuffer("元整");
}
ms.append(fraction); //加入小数部分
return ms.toString();
}
public static void main(String [] ar){
System.out.println(new MoneyFormat().format("10005022.123009"));
System.out.println(new MoneyFormat().format("0.12"));
}
}
转自【http://www.open-open.com/lib/view/open1400206687504.html】
分享到:
相关推荐
可以把金额数值转为财务上常用的金额大写,如100元 转为壹佰园
文件的复制、删除等封装操作
String过滤敏感字
日期的date格式和string格式的互相转换
java代码中操作数据库。
主要封装了冒泡排序、选择排序,其他待完善。
smali2java工具——直接将smali转换成java,在网上找了很久才找到了,方便后来人。
JAVA修改工具——JavaMagic JAVA修改工具——JavaMagic
将数字转为中文金额的大写方式(Java版) 博文链接:https://lovinchan.iteye.com/blog/202768
主要为大家详细介绍了java实现数字转换人民币中文大写工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
用Zixing实现的二维码。可以在二维码中间插入logo图像
将阿拉伯数字金额转成中文大写 "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"......
dom4j是sourceforge.net上的一个开源项目,主要用于对XML的解析。
生成随机验证码,可输出图片,或展示在html、jsp中。 详情:http://blog.csdn.net/qqicq2001/article/details/71108391
NULL 博文链接:https://1017401036.iteye.com/blog/2312722
java毕业设计——基于java的QQ屏幕截图工具的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——基于java的QQ屏幕截图工具的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——基于java的QQ...
人民币大写金额转换工具人民币大写金额转换工具人民币大写金额转换工具人民币大写金额转换工具
人民币大写金额转换工具人民币大写金额转换工具人民币大写金额转换工具人民币大写金额转换工具
java毕业设计——java一个简单的即时通讯工具的设计与开发(源代码+论文).zip java毕业设计——java一个简单的即时通讯工具的设计与开发(源代码+论文).zip java毕业设计——java一个简单的即时通讯工具的设计与开发...