<!---->package org.phyeas.demo.number;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumberToRMB {
private static String[] UNIT = { "元", "万", "亿" };
private static String[] UNIT2 = { "千", "百", "十" };
private static final String ZERO = "零";
private static String[] NUM = { "壹", "贰", "三", "肆", "伍", "陆", "柒", "捌",
"玖", "拾" };
/**
* 转换一串字符
*
* @param str
* @return
*/
public static String parseCharsToRMB(String str) {
if (!isNumber(str)) {
throw new IllegalArgumentException("参数不正确,必须为数字");
}
StringBuffer buffer = new StringBuffer();
int count = 0;
for (int i = str.length(); i > 0; i -= 4, count++) {
String char4 = null;
if (i - 4 < 0) {
System.out.println("start=" + 0 + ".end=" + i);
char4 = str.substring(0, i);
buffer.insert(0, parse4CharsToRMB(char4) + UNIT[count]);
break;
}
System.out.println("start=" + (i - 4) + ".end=" + i);
char4 = str.substring(i - 4, i);
buffer.insert(0, parse4CharsToRMB(char4) + UNIT[count]);
}
return buffer.toString();
}
/**
* 转换4位字符
*
* @param str
* @return
*/
public static String parse4CharsToRMB(String str) {
if (str.length() > 4 || !isNumber(str)) {
throw new IllegalArgumentException("参数不正确,str应该为不大于4位的字符");
}
StringBuffer result = new StringBuffer();
int startUNIT = getStartUNIT(str.length());
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '0') {
if (i == 0) {
result.append(ZERO);
} else {
appendZero(result, i);
}
startUNIT++;
} else {
int index = Integer.parseInt(String.valueOf(str.charAt(i))) - 1;
result.append(NUM[index]);
if (startUNIT < UNIT2.length) {
result.append(UNIT2[startUNIT]);
startUNIT++;
}
}
}
return result.toString();
}
/**
* 获取起始位置
*
* @param strLength
* @return
*/
public static int getStartUNIT(int strLength) {
switch (strLength) {
case 4:
return 0;
case 3:
return 1;
case 2:
return 2;
case 1:
return 3;
default:
return 0;
}
}
/**
* 0是特殊的。所以单独一个方法添加0
*
* @param buffer
* @param index
* @return
*/
private static StringBuffer appendZero(StringBuffer buffer, int index) {
System.out.println("buffer=" + buffer);
String before = buffer.substring(index, index + 1);
System.out.println("before=" + before);
if (before.equals(ZERO)) {
return buffer;
} else {
buffer.append(ZERO);
}
return buffer;
}
/**
* 判断是否为数字字符串
*
* @param str
* @return
*/
public static boolean isNumber(String str) {
if (str != null && str.length() > 0) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher m = pattern.matcher(str);
if (m.find()) {
return true;
}
return false;
}
return false;
}
public static void main(String[] args) {
System.out.println("转换1580654=" + parseCharsToRMB("1580654"));
}
}
分享到:
相关推荐
输入数字转换为人民币大写,Delphi源代码,代码里有个重要的转换单位,此单位共定义两个函数来实现数字金额的中文大写转化,此函数可支持12位整数。程序思路如下: 将小数点前的整数取出,算出整数长度,不足千亿时...
此程序主要实现把输入的人民币数字形式转化为大写的形式,例如:输入为1.56 ;输出为壹元伍角陆分
人民币大小写转换器可以实现在文本框中输入数字人民币,然后通过点击大小写转换按钮,实现将数字人民币转换成大写汉字人民币的形式,并在列一个文本框中显示出来。
显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择...
、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰 叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择是否自动存入WINDOWS剪贴 板,并可自动输出在其它程序窗口的...
显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择是否...
显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择是否...
显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式。以上各种转换与计算结果可选择是否自动存入WINDOWS剪贴板,并可自动输出在其它程序窗口的当前...
并修改了数据转换为\"人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)的一些BUG,大大方便了财务、票据等方面的工作,输入的任何数据和计算结果可自动输入在其它...
并修改了数据转换为"人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹 仟肆佰叁拾伍圆柒角伍分、¥1435.75)的一些BUG,大大方便了财务、票据等方面的工作,输 入的任何数据和计算结果可自动输入在...
显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择...
并修改了数据转换为"人民币中文大写形式、人民币数字形式(例:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)的一些BUG,大大方便了财务、票据等方面的工作,输入的任何数据和计算结果可自动输入在其它程序...
【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到...
33.从工作表第一行的标题文字以数字形式返回所在列号 34.在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求和 35.返回 Column 英文字 36.查找指定列名的列数 37.文字格式的时间(分:秒)转化为...
5.4.6 RMB——将数字转换为带人民币符号¥的文本 177 5.4.7 NUMBERSTRING——将数值转换为大写汉字 178 5.4.8 NUMBERVALUE——以与区域设置无关的方式将文本转换为数字 179 5.4.9 T——将参数转换为文本 179 ...
并修改了数据转换为"人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)的一些BUG,大大方便了财务、票据等方面的工作,输入的任何数据和计算结果可自动输入在其它...
并修改了数据转换为"人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)的一些BUG,大大方便了财务、票据等方面的工作,输入的任何数据和计算结果可自动输入在其它...
【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到...
功能: 将阿拉伯数字转换成人民币大写形式 特点: 1.可以批量操作。 2.可以同时选择多个区域再执行工具。 3.几百个单元格数据瞬间完成转换。 工具: 【大写转小写】 功能: 将人民币大写转换成阿拉伯数字 特点: 1....
功能: 将阿拉伯数字转换成人民币大写形式 特点: 1.可以批量操作。 2.可以同时选择多个区域再执行工具。 3.几百个单元格数据瞬间完成转换。 工具: 【大写转小写】 功能: 将人民币大写转换成阿拉伯数字 特点: 1....