- 浏览: 21383 次
- 性别:
- 来自: 深圳
最新评论
-
请叫我东哥:
我想问一下,Spinner.js是3.0以上才有的,那2.2+ ...
我的扩展EXT时间控件,可以选择到时分 -
zht520:
不错 实现效果很好
我的扩展EXT时间控件,可以选择到时分 -
wzgl2014:
" 如果不以接口形式,运行时会出现类型转换错误 ...
Spring的事务管理 -
xiaoyayaday:
css 呢?
我的扩展EXT时间控件,可以选择到时分 -
bardo:
建议看看这一个
http://bardo.iteye.com ...
人民币转成大写
/**
* 人民币转成大写
*
* @param value
* @return String
*/
public static String hangeToBig(double value)
{
char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
char[] vunit = { '万', '亿' }; // 段名表示
char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
long midVal = (long) (value * 100); // 转化成整形
String valStr = String.valueOf(midVal); // 转化成字符串
String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
String rail = valStr.substring(valStr.length() - 2); // 取小数部分
String prefix = ""; // 整数部分转化的结果
String suffix = ""; // 小数部分转化的结果
// 处理小数点后面的数
if (rail.equals("00"))
{ // 如果小数部分为0
suffix = "整";
}
else
{
suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
}
// 处理小数点前面的数
char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
char zero = '0'; // 标志'0'表示出现过0
byte zeroSerNum = 0; // 连续出现0的次数
for (int i = 0; i < chDig.length; i++)
{ // 循环处理每个数字
int idx = (chDig.length - i - 1) % 4; // 取段内位置
int vidx = (chDig.length - i - 1) / 4; // 取段位置
if (chDig[i] == '0')
{ // 如果当前字符是0
zeroSerNum++; // 连续0次数递增
if (zero == '0')
{ // 标志
zero = digit[0];
}
else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
{
prefix += vunit[vidx - 1];
zero = '0';
}
continue;
}
zeroSerNum = 0; // 连续0次数清零
if (zero != '0')
{ // 如果标志不为0,则加上,例如万,亿什么的
prefix += zero;
zero = '0';
}
prefix += digit[chDig[i] - '0']; // 转化该数字表示
if (idx > 0)
prefix += hunit[idx - 1];
if (idx == 0 && vidx > 0)
{
prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
}
}
if (prefix.length() > 0)
prefix += '圆'; // 如果整数部分存在,则有圆的字样
return prefix + suffix; // 返回正确表示
}
原因是double转long时丢了最后的精度,改为如下部分我试过是可以了
BigDecimal a = new BigDecimal(value);
a = a.multiply(new BigDecimal("100"));
a = a.setScale(0,BigDecimal.ROUND_HALF_UP);
String valStr = String.valueOf(a);
String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
String rail = valStr.substring(valStr.length() - 2); // 取小数部分
public static void main(String[] args) {
System.out.println(hangeToBig(1234567890.11));
}
结果: 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆壹角零分
有BUG
这个经典,别出心裁,代码整齐规范,注释也很到位,一看就是十年以上的功底了。不错不错,楼猪继续努力,顶。
* 人民币转成大写
*
* @param value
* @return String
*/
public static String hangeToBig(double value)
{
char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
char[] vunit = { '万', '亿' }; // 段名表示
char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
long midVal = (long) (value * 100); // 转化成整形
String valStr = String.valueOf(midVal); // 转化成字符串
String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
String rail = valStr.substring(valStr.length() - 2); // 取小数部分
String prefix = ""; // 整数部分转化的结果
String suffix = ""; // 小数部分转化的结果
// 处理小数点后面的数
if (rail.equals("00"))
{ // 如果小数部分为0
suffix = "整";
}
else
{
suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
}
// 处理小数点前面的数
char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
char zero = '0'; // 标志'0'表示出现过0
byte zeroSerNum = 0; // 连续出现0的次数
for (int i = 0; i < chDig.length; i++)
{ // 循环处理每个数字
int idx = (chDig.length - i - 1) % 4; // 取段内位置
int vidx = (chDig.length - i - 1) / 4; // 取段位置
if (chDig[i] == '0')
{ // 如果当前字符是0
zeroSerNum++; // 连续0次数递增
if (zero == '0')
{ // 标志
zero = digit[0];
}
else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
{
prefix += vunit[vidx - 1];
zero = '0';
}
continue;
}
zeroSerNum = 0; // 连续0次数清零
if (zero != '0')
{ // 如果标志不为0,则加上,例如万,亿什么的
prefix += zero;
zero = '0';
}
prefix += digit[chDig[i] - '0']; // 转化该数字表示
if (idx > 0)
prefix += hunit[idx - 1];
if (idx == 0 && vidx > 0)
{
prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
}
}
if (prefix.length() > 0)
prefix += '圆'; // 如果整数部分存在,则有圆的字样
return prefix + suffix; // 返回正确表示
}
评论
12 楼
bardo
2011-04-17
建议看看这一个
http://bardo.iteye.com/blog/983559
http://bardo.iteye.com/blog/983559
11 楼
bardo
2011-04-17
建议看看这一个
http://bardo.iteye.com/blog/983559
http://bardo.iteye.com/blog/983559
10 楼
hilinw
2011-03-14
hilinw 写道
/**
结果: 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆壹角零分
有BUG
结果: 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆壹角零分
有BUG
原因是double转long时丢了最后的精度,改为如下部分我试过是可以了
BigDecimal a = new BigDecimal(value);
a = a.multiply(new BigDecimal("100"));
a = a.setScale(0,BigDecimal.ROUND_HALF_UP);
String valStr = String.valueOf(a);
String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
String rail = valStr.substring(valStr.length() - 2); // 取小数部分
9 楼
迎新婉莹
2011-03-07
其实用数组加字符串替换更简单,只要掌握好对数组间的对应。
8 楼
y112300
2011-03-07
莫不是陆家嘴的一公司?
7 楼
chenxiang105
2011-03-07
这个是上海一个公司的机试题, 上面说lz10年一上功力那小子像是个10天的...
如果想lz这样答案,貌似不及格了
如果想lz这样答案,貌似不及格了
6 楼
shadowlin
2011-03-07
5 楼
helloxyz123
2011-03-07
hilinw 写道
/**
* 人民币转成大写
*
* @param value
* @return String
*/
public static String hangeToBig(double value)
{
char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
char[] vunit = { '万', '亿' }; // 段名表示
char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
long midVal = (long) (value * 100); // 转化成整形
String valStr = String.valueOf(midVal); // 转化成字符串
String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
String rail = valStr.substring(valStr.length() - 2); // 取小数部分
String prefix = ""; // 整数部分转化的结果
String suffix = ""; // 小数部分转化的结果
// 处理小数点后面的数
if (rail.equals("00"))
{ // 如果小数部分为0
suffix = "整";
}
else
{
suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
}
// 处理小数点前面的数
char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
char zero = '0'; // 标志'0'表示出现过0
byte zeroSerNum = 0; // 连续出现0的次数
for (int i = 0; i < chDig.length; i++)
{ // 循环处理每个数字
int idx = (chDig.length - i - 1) % 4; // 取段内位置
int vidx = (chDig.length - i - 1) / 4; // 取段位置
if (chDig[i] == '0')
{ // 如果当前字符是0
zeroSerNum++; // 连续0次数递增
if (zero == '0')
{ // 标志
zero = digit[0];
}
else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
{
prefix += vunit[vidx - 1];
zero = '0';
}
continue;
}
zeroSerNum = 0; // 连续0次数清零
if (zero != '0')
{ // 如果标志不为0,则加上,例如万,亿什么的
prefix += zero;
zero = '0';
}
prefix += digit[chDig[i] - '0']; // 转化该数字表示
if (idx > 0)
prefix += hunit[idx - 1];
if (idx == 0 && vidx > 0)
{
prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
}
}
if (prefix.length() > 0)
prefix += '圆'; // 如果整数部分存在,则有圆的字样
return prefix + suffix; // 返回正确表示
}
* 人民币转成大写
*
* @param value
* @return String
*/
public static String hangeToBig(double value)
{
char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
char[] vunit = { '万', '亿' }; // 段名表示
char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
long midVal = (long) (value * 100); // 转化成整形
String valStr = String.valueOf(midVal); // 转化成字符串
String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
String rail = valStr.substring(valStr.length() - 2); // 取小数部分
String prefix = ""; // 整数部分转化的结果
String suffix = ""; // 小数部分转化的结果
// 处理小数点后面的数
if (rail.equals("00"))
{ // 如果小数部分为0
suffix = "整";
}
else
{
suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
}
// 处理小数点前面的数
char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
char zero = '0'; // 标志'0'表示出现过0
byte zeroSerNum = 0; // 连续出现0的次数
for (int i = 0; i < chDig.length; i++)
{ // 循环处理每个数字
int idx = (chDig.length - i - 1) % 4; // 取段内位置
int vidx = (chDig.length - i - 1) / 4; // 取段位置
if (chDig[i] == '0')
{ // 如果当前字符是0
zeroSerNum++; // 连续0次数递增
if (zero == '0')
{ // 标志
zero = digit[0];
}
else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
{
prefix += vunit[vidx - 1];
zero = '0';
}
continue;
}
zeroSerNum = 0; // 连续0次数清零
if (zero != '0')
{ // 如果标志不为0,则加上,例如万,亿什么的
prefix += zero;
zero = '0';
}
prefix += digit[chDig[i] - '0']; // 转化该数字表示
if (idx > 0)
prefix += hunit[idx - 1];
if (idx == 0 && vidx > 0)
{
prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
}
}
if (prefix.length() > 0)
prefix += '圆'; // 如果整数部分存在,则有圆的字样
return prefix + suffix; // 返回正确表示
}
public static void main(String[] args) {
System.out.println(hangeToBig(1234567890.11));
}
结果: 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆壹角零分
有BUG
4 楼
yanga520
2011-03-07
怎么不试着将金额转换为数字呢?
3 楼
freish
2011-03-06
这是在干甚
2 楼
ratking
2011-03-06
下面这个getNumberToRMB()来自网络。
/** * 人民币转成大写测试. * Debug: hangeToBig(100203.04)=壹拾零贰佰零叁圆零角肆分 * Debug: getNumberToRMB(100203.04)=壹拾万零贰佰零叁元零肆分 * * @author ratking (at) ynet.com */ public class TestRmb { public static void main(String[] args) { double value = 100203.04; System.out.println("Debug: hangeToBig(" + 100203.04 + ")=" + hangeToBig(value)); System.out.println("Debug: getNumberToRMB(" + 100203.04 + ")=" + getNumberToRMB("" + value)); } /** * 人民币转成大写 * * @param value * @return String */ public static String hangeToBig(double value) { char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示 char[] vunit = { '万', '亿' }; // 段名表示 char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示 long midVal = (long) (value * 100); // 转化成整形 String valStr = String.valueOf(midVal); // 转化成字符串 String head = valStr.substring(0, valStr.length() - 2); // 取整数部分 String rail = valStr.substring(valStr.length() - 2); // 取小数部分 String prefix = ""; // 整数部分转化的结果 String suffix = ""; // 小数部分转化的结果 // 处理小数点后面的数 if (rail.equals("00")) { // 如果小数部分为0 suffix = "整"; } else { suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来 } // 处理小数点前面的数 char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组 char zero = '0'; // 标志'0'表示出现过0 byte zeroSerNum = 0; // 连续出现0的次数 for (int i = 0; i < chDig.length; i++) { // 循环处理每个数字 int idx = (chDig.length - i - 1) % 4; // 取段内位置 int vidx = (chDig.length - i - 1) / 4; // 取段位置 if (chDig[i] == '0') { // 如果当前字符是0 zeroSerNum++; // 连续0次数递增 if (zero == '0') { // 标志 zero = digit[0]; } else if (idx == 0 && vidx > 0 && zeroSerNum < 4) { prefix += vunit[vidx - 1]; zero = '0'; } continue; } zeroSerNum = 0; // 连续0次数清零 if (zero != '0') { // 如果标志不为0,则加上,例如万,亿什么的 prefix += zero; zero = '0'; } prefix += digit[chDig[i] - '0']; // 转化该数字表示 if (idx > 0) prefix += hunit[idx - 1]; if (idx == 0 && vidx > 0) { prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿 } } if (prefix.length() > 0) prefix += '圆'; // 如果整数部分存在,则有圆的字样 return prefix + suffix; // 返回正确表示 } /** * 人民币小写转换成大写 * @param s 人民币小写(比如:12043000.01) * @return 人民币大写(比如:壹仟贰佰零肆万叁仟元零壹分) */ public static String getNumberToRMB(String s) { if (s == null || s.trim().length() == 0) { return s; } StringBuilder rmbChinese = new StringBuilder(); // 小数点位置 int xsdwz = s.indexOf("."); // 整数部分 String integral = ""; // 角分部分 String decimal = ""; String[] wy = {}; int xh = 0; String prefix = ""; // 整数部分转化的结果 String suffix = ""; // 小数部分转化的结果 if (xsdwz >= 0) { integral = s.substring(0, xsdwz); if (!integral.equals("")) { if (Double.parseDouble(integral) == 0) { integral = ""; } } decimal = s.substring(xsdwz + 1, s.length()); //for(int i=0;i<new) if (decimal.length() < 2) { decimal += "0"; } } else { integral = s; decimal = ""; //new2="00"; } if (integral.length() > 0) { if (integral.substring(0, 1).equals("-") || integral.substring(0, 1).equals("+")) { if (integral.substring(0, 1).equals("-")) { rmbChinese.append("负"); } // 去掉前面的正、负符号 integral = integral.substring(1, integral.length()); } } if (integral.length() % 4 == 0) { xh = integral.length() / 4; //wy = new String[new1.length() / 4]; } else { xh = integral.length() / 4 + 1; //wy = new String[new1.length() / 4 + 1]; } wy = new String[xh]; for (int i = 0; i < xh; i++) { if ((i + 1) * 4 <= integral.length()) { wy[i] = integral.substring(integral.length() - (i + 1) * 4, integral.length() - i * 4); } else { wy[i] = integral.substring(0, integral.length() % 4); } //System.out.println(wy); } if (integral.length() > 0 && Integer.parseInt(decimal) > 9) { rmbChinese.append(getDxZs(integral, 1, wy)); rmbChinese.append(getDxJf(decimal)); } else if (integral.length() > 0 && (Integer.parseInt(decimal) > 0 && Integer.parseInt(decimal) <= 9)) { rmbChinese.append(getDxZs(integral, 3, wy)); rmbChinese.append(getDxJf(decimal)); } else if (integral.length() > 0 && Integer.parseInt(decimal) == 0) { rmbChinese.append(getDxZs(integral, 2, wy)); } else if (integral.length() == 0 && Integer.parseInt(decimal) > 0) { rmbChinese.append(getDxJf(decimal)); } return rmbChinese.toString(); } /** * 获得大写整数部分 * @param s * @param i1 * @param wy * @return */ private static String getDxZs(String s, int i1, String[] wy) { StringBuilder dxzs = new StringBuilder(); for (int i = 0; i < s.length(); i++) { if (Integer.parseInt(s.substring(i, 1 + i)) > 0) { if (i > 0 && i < s.length() - 1) { if (Integer.parseInt(s.substring(i - 1, i)) == 0) { dxzs.append("零"); dxzs.append(getHanZi(Integer.parseInt(s.substring(i, i + 1)))); dxzs.append(getWeiShu(s.length() - i)); } else { dxzs.append(getHanZi(Integer.parseInt(s.substring(i, i + 1)))); dxzs.append(getWeiShu(s.length() - i)); } } else if (i == s.length() - 1) {// && i!=0) { if (i != 0 && Integer.parseInt(s.substring(i - 1, i)) == 0) { dxzs.append("零"); } if (i1 == 1) { dxzs.append(getHanZi(Integer.parseInt(s.substring(i, i + 1)))); dxzs.append(getWeiShu(s.length() - i)); } else if (i1 == 2) { dxzs.append(getHanZi(Integer.parseInt(s.substring(i, i + 1)))); dxzs.append(getWeiShu(s.length() - i)); dxzs.append("整"); } else if (i1 == 3) { dxzs.append(getHanZi(Integer.parseInt(s.substring(i, i + 1)))); dxzs.append(getWeiShu(s.length() - i)); dxzs.append("零"); } } else if (i == 0) { //&& i != s.length() - 1) { dxzs.append(getHanZi(Integer.parseInt(s.substring(i, i + 1)))); dxzs.append(getWeiShu(s.length() - i)); } } else if (Integer.parseInt(s.substring(i, i + 1)) == 0) { if (i > 0 && i < s.length() - 1) { if (s.length() - i == 9) { if (Integer.parseInt(wy[2]) != 0) { dxzs.append("亿"); } } else if (s.length() - i == 5) { if (Integer.parseInt(wy[1]) != 0) { dxzs.append("万"); } } } else if (i > 0 && i == s.length() - 1) { if (i1 == 1) { dxzs.append("元零"); } else if (i1 == 2) { dxzs.append("元整"); } else if (i1 == 3) { dxzs.append("元零"); } } } } return dxzs.toString(); } /** * 获得大写角分部分 * @param s * @return */ private static String getDxJf(String s) { StringBuilder dxjf = new StringBuilder(); for (int i = 0; i < s.length(); i++) { if (Integer.parseInt(s.substring(i, i + 1)) != 0) { dxjf.append(getHanZi(Integer.parseInt(s.substring(i, i + 1)))); dxjf.append(getJiaFen(i + 1)); } else if (Integer.parseInt(s.substring(i, i + 1)) == 0 && i == 1) { dxjf.append("整"); } } return dxjf.toString(); } /** * 获得角、分 * @param s * @return */ private static String getJiaFen(int s) { String hz = ""; if (s == 1) { hz = "角"; } else if (s == 2) { hz = "分"; } return hz; } /** * 获得数字的大写汉字 * @param s 0~9的整数 * @return 零~玖的汉字 */ private static String getHanZi(int s) { String[] hzDigit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; return hzDigit[s]; } /** * 获得位数 * @param s * @return */ private static String getWeiShu(int s) { String hz = ""; if (s == 1) { hz = "元"; } else if (s == 2) { hz = "拾"; } else if (s == 3) { hz = "佰"; } else if (s == 4) { hz = "仟"; } else if (s == 5) { hz = "万"; } else if (s == 6) { hz = "拾"; } else if (s == 7) { hz = "佰"; } else if (s == 8) { hz = "仟"; } else if (s == 9) { hz = "亿"; } else if (s == 10) { hz = "拾"; } else if (s == 11) { hz = "佰"; } else if (s == 12) { hz = "仟"; } return hz; } }
1 楼
抓挖鸟
2011-03-04
hilinw 写道
/**
* 人民币转成大写
*
* @param value
* @return String
*/
public static String hangeToBig(double value)
{
char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
char[] vunit = { '万', '亿' }; // 段名表示
char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
long midVal = (long) (value * 100); // 转化成整形
String valStr = String.valueOf(midVal); // 转化成字符串
String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
String rail = valStr.substring(valStr.length() - 2); // 取小数部分
String prefix = ""; // 整数部分转化的结果
String suffix = ""; // 小数部分转化的结果
// 处理小数点后面的数
if (rail.equals("00"))
{ // 如果小数部分为0
suffix = "整";
}
else
{
suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
}
// 处理小数点前面的数
char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
char zero = '0'; // 标志'0'表示出现过0
byte zeroSerNum = 0; // 连续出现0的次数
for (int i = 0; i < chDig.length; i++)
{ // 循环处理每个数字
int idx = (chDig.length - i - 1) % 4; // 取段内位置
int vidx = (chDig.length - i - 1) / 4; // 取段位置
if (chDig[i] == '0')
{ // 如果当前字符是0
zeroSerNum++; // 连续0次数递增
if (zero == '0')
{ // 标志
zero = digit[0];
}
else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
{
prefix += vunit[vidx - 1];
zero = '0';
}
continue;
}
zeroSerNum = 0; // 连续0次数清零
if (zero != '0')
{ // 如果标志不为0,则加上,例如万,亿什么的
prefix += zero;
zero = '0';
}
prefix += digit[chDig[i] - '0']; // 转化该数字表示
if (idx > 0)
prefix += hunit[idx - 1];
if (idx == 0 && vidx > 0)
{
prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
}
}
if (prefix.length() > 0)
prefix += '圆'; // 如果整数部分存在,则有圆的字样
return prefix + suffix; // 返回正确表示
}
* 人民币转成大写
*
* @param value
* @return String
*/
public static String hangeToBig(double value)
{
char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
char[] vunit = { '万', '亿' }; // 段名表示
char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
long midVal = (long) (value * 100); // 转化成整形
String valStr = String.valueOf(midVal); // 转化成字符串
String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
String rail = valStr.substring(valStr.length() - 2); // 取小数部分
String prefix = ""; // 整数部分转化的结果
String suffix = ""; // 小数部分转化的结果
// 处理小数点后面的数
if (rail.equals("00"))
{ // 如果小数部分为0
suffix = "整";
}
else
{
suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
}
// 处理小数点前面的数
char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
char zero = '0'; // 标志'0'表示出现过0
byte zeroSerNum = 0; // 连续出现0的次数
for (int i = 0; i < chDig.length; i++)
{ // 循环处理每个数字
int idx = (chDig.length - i - 1) % 4; // 取段内位置
int vidx = (chDig.length - i - 1) / 4; // 取段位置
if (chDig[i] == '0')
{ // 如果当前字符是0
zeroSerNum++; // 连续0次数递增
if (zero == '0')
{ // 标志
zero = digit[0];
}
else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
{
prefix += vunit[vidx - 1];
zero = '0';
}
continue;
}
zeroSerNum = 0; // 连续0次数清零
if (zero != '0')
{ // 如果标志不为0,则加上,例如万,亿什么的
prefix += zero;
zero = '0';
}
prefix += digit[chDig[i] - '0']; // 转化该数字表示
if (idx > 0)
prefix += hunit[idx - 1];
if (idx == 0 && vidx > 0)
{
prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
}
}
if (prefix.length() > 0)
prefix += '圆'; // 如果整数部分存在,则有圆的字样
return prefix + suffix; // 返回正确表示
}
这个经典,别出心裁,代码整齐规范,注释也很到位,一看就是十年以上的功底了。不错不错,楼猪继续努力,顶。
相关推荐
### 小写人民币转换成大写人民币 在财务、会计以及正式文件中,为了防止篡改,经常需要将小写的阿拉伯数字金额转换为大写形式。这种转换在银行支票填写、合同金额书写等方面尤为常见。本文将详细介绍如何实现从小写...
在Excel电子表格中,将小写人民币转换成大写是一项常见的财务操作,特别是在编制财务报表或填写支票时。以下是一些关于如何在Excel中实现这一转换的关键知识点: 1. **推荐公式1**: 这个公式首先检查数值是否为...
本文将深入探讨如何使用ASP(Active Server Pages)来解决“人民币由数字转换成中文大写”的问题。 ASP是一种服务器端脚本环境,它允许开发人员创建动态网页和Web应用程序。在处理人民币数字到大写的转换时,我们...
根据提供的文件信息,本文将详细解释如何使用C#语言实现小写人民币数字转换为大写人民币数字的功能。此过程涉及到的编码技术、算法设计及实际应用场景等知识点。 ### C#编程语言简介 C#(发音为 "C Sharp")是由...
这个方法接受一个表示人民币金额的小写字符串,然后通过一系列的除法和取余运算,将每个位上的数字转换成对应的汉字,最后拼接成完整的人民币大写形式。 在实际使用时,你可以这样调用这个方法: ```csharp string...
人民币数字转换成汉字大写 android Java 运行效率
Java 人民币金额数字转换成大写 Java 人民币金额数字转换成大写是 Java 面试中最常见的问题之一。本文将详细介绍如何使用 Java 实现人民币金额数字转换成大写的解决方案。 Java 中的 NumberFormat 类 在 Java 中...
这篇博客"PHP 人民币小写转换成大写"提供了一个实用的解决方案,通过源码实现这一功能。 首先,我们需要理解人民币金额的大写规则。在中国,人民币金额的大写包括壹、贰、叁、肆、伍、陆、柒、捌、玖、零这些汉字,...
本文实例为大家分享了python实现人民币大写转换的具体代码,供大家参考,具体内容如下 #!/usr/bin/python # -*- coding:utf-8 -*- # ********* 转换方法介绍 ********* # 将需要转换的数字从右向左,每4位分成一个...
### 小写人民币转大写ACCESS函数解析 #### 背景介绍 在日常的财务工作中,经常需要将数字格式的金额转换成汉字大写形式,尤其是在开具支票、填写电汇凭证或制作记账凭证时更为常见。这种转换不仅能够提高正式文件的...
人民币数字转大写.java
人民币转换为大写
在Excel中将人民币金额小写转成大写 在Excel中将人民币金额小写转成大写 在Excel中将人民币金额小写转成大写
Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...
人民币小写转大写人民币小写转大写人民币小写转大写
在JavaScript编程中,有时我们需要将人民币的数字金额(小写)转换为中文的大写形式,以便于财务报表或发票的规范书写。这个过程涉及到字符映射、数字处理以及字符串操作等多个知识点。以下是对这个主题的详细说明:...
数字转换成人民币大写
这是一个把人民币数字转换成大写的java程序
本话题聚焦于“人民币转换为大写”,并且要考虑负数和保留两位小数的情况。在处理这样的需求时,开发者需要熟悉中国的货币表示规则以及相关的编程技巧。 首先,人民币的数字表示分为小写和大写两种形式。小写是常规...
Java 类金额转换成大写 在 Java 编程语言中,金额转换成大写是非常有用的功能,特别是在财务、银行、电子商务等领域中。下面我们来详细介绍如何使用 Java 实现金额转换成大写的功能。 实例代码分析 首先,我们来...