您的位置:首页 > 编程语言 > Java开发

Java代码实现数字转换中文大写及人民币大写

2013-11-05 10:57 435 查看
package com.sdcncsi.common.util;

import java.text.DecimalFormat;

public class ZhTest {

private static final String digit_0 = "零壹贰叁肆伍陆柒捌玖";

private static final String digit_1 = "零一二三四五六七八九";

private static final String[] digit_2 = { "", "十", "百", "千" };

private static final String[] digit_3 = { "", "拾", "佰", "仟" };

private static final String[] digit_4 = { "", "万", "亿", "万亿", "亿亿" };

/**

* @param args

*/

public static void main(String[] args) {

System.out.println(changeDigit("504.00", false));

System.out.println(changeDigit("2012.12", false));

System.out.println(changeDigit("210.12", true));

System.out.println(changeNumberRMB(210.12));

}

/**

* Description: 数字转化成整数

*

* @param str

* @param bo

* @return

*/

public static String changeDigit(String str, boolean bo) {

StringBuffer strbu = new StringBuffer();

int dou = str.indexOf(".");

// :判断是否为小数还是整数,长度小于零为整数

if (dou < 0) {

dou = str.length();

}

// :获取整数部分

String inter = str.substring(0, dou);

strbu.append(changeInteger(Long.parseLong(inter), bo));

// :处理小数部分

if (dou != str.length()) {

strbu.append("点");

// :获取小数点后所有数

String xh = str.substring(dou + 1);

for (int i = 0; i < xh.length(); i++) {

if (bo) {

strbu.append(digit_0.charAt(Integer.parseInt(xh.substring(

i, i + 1))));

} else {

strbu.append(digit_1.charAt(Integer.parseInt(xh.substring(

i, i + 1))));

}

}

}

String strs = strbu.toString();

// :处理特殊情况,可能不全

if (strs.startsWith("零")) {

strs = strs.substring(1);

}

if (strs.startsWith("一十")) {

strs = strs.substring(1);

}

while (strs.endsWith("零")) {

strs = strs.substring(0, strs.length() - 1);

}

if (strs.startsWith("点")) {

strs = "零" + strs;

}

if (strs.endsWith("点")) {

strs = strs.substring(0, strs.length() - 1);

}

return strs;

}

/**

* 位数小于4时,调用处理数据

*

* @param str

* @param bo

* @return

*/

public static String readNumber(String str, boolean bo) {

StringBuffer strbu = new StringBuffer();

if (str.length() != 4) {

return null;

}

for (int i = 0; i < 4; i++) {

char ch = str.charAt(i);

if (ch == '0' && i > 1 && str.charAt(i - 1) == '0') {

continue;

}

if (ch != '0' && i > 1 && str.charAt(i - 1) == '0') {

strbu.append('零');

}

if (ch != '0') {

if (bo) {

strbu.append(digit_0.charAt(ch - 48));

strbu.append(digit_3[4 - i - 1]);

} else {

strbu.append(digit_1.charAt(ch - 48));

strbu.append(digit_2[4 - i - 1]);

}

}

}

return strbu.toString();

}

/**

* 整数部分转换大写

*

* @param lon

* @param bo

* @return

*/

public static String changeInteger(long lon, boolean bo) {

StringBuffer strbu = new StringBuffer();

// :增加3位数,为了完成大写转换

String strN = "000" + lon;

int strN_L = strN.length() / 4;

// :根据不同的位数长度,消除strN"0"的个数

strN = strN.substring(strN.length() - strN_L * 4);

for (int i = 0; i < strN_L; i++) {

String s1 = strN.substring(i * 4, i * 4 + 4);

String s2 = readNumber(s1, bo);

strbu.append(s2);

if (s2.length() != 0) {

strbu.append(digit_4[strN_L - i - 1]);

}

}

String s = new String(strbu);

if (s.length() != 0 && s.startsWith("零"))

s = s.substring(1);

return s;

}

/**

* 人名币输出格式

*

* @param rmb

* @return

*/

public static String changeNumberRMB(double rmb) {

String strRMB = "" + rmb;

DecimalFormat df = new DecimalFormat("#.#");

df.setMaximumFractionDigits(2);

strRMB = df.format(rmb).toString();

// :true人民币大写,并返回数据

strRMB = changeDigit(strRMB, true);

if (strRMB.indexOf("点") >= 0) {

strRMB = strRMB + "零";

strRMB = strRMB.replaceAll("点", "圆");

String str1 = strRMB.substring(0, strRMB.indexOf("圆") + 1);

String str2 = strRMB.substring(strRMB.indexOf("圆") + 1);

strRMB = str1 + str2.charAt(0) + "角" + str2.charAt(1) + "分整";

} else {

strRMB = strRMB + "圆整";

}

return "人民币(大写):" + strRMB;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: