Java将控制台输入的人民币数字金额转化为大写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java将控制台输入的人民币数字金额转化为大写相关的知识,希望对你有一定的参考价值。

列如我在控制台输入:120065001.68
要求打印为:一亿两千零六万五千零一元六角八分
伪代码也可以

代码如下:
/**
* 人民币转成大写
*
* @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; // 返回正确表示
参考技术A import java.text.*;
import java.util.Scanner;
/**
* @作者:智鸱儿-zhichier
* @version 1.0 己丑年八月初三-2009/09/21
*/
public class RenminbiZhuanhuan

/**
*
*/
public RenminbiZhuanhuan()
// TODO Auto-generated constructor stub


/**
* @param args
*/
public static void main(String[] args)
Scanner s=new Scanner(System.in);
System.out.println("请输入你要转换的金额:");
double number=s.nextDouble();
String s1=zhuanhuan(new Double(number));
System.out.println("转换成大写后的金额是:"+s1);
// TODO Auto-generated method stub


public static String zhuanhuan(Object ob)
String s=new DecimalFormat("#.00").format(ob);
s=s.replaceAll("\\.", "");//将字符串中的"."去掉
char d[]= '零', '一', '两', '三', '四',
'五', '六', '七', '八', '九';
String unit="仟佰拾兆仟佰拾亿仟佰拾万仟佰拾元角分";
int c=unit.length();
StringBuffer sb=new StringBuffer(unit);
for(int i=s.length()-1;i>=0;i--)
sb.insert(c-s.length()+i,d[s.charAt(i)-0x30]);

s=sb.substring(c-s.length(),c+s.length());
s=s.replaceAll("零[仟佰拾]", "零").
replaceAll("零2,", "零").
replaceAll("零([兆万元Ԫ])", "$1").
replaceAll("零[角分]", "");
return s;




希望对你有帮助!本回答被提问者采纳
参考技术B import java.util.*;
public class TestNum

public static void main(String[] args)
System.out.println("请输入要转化的数字?");
Scanner sc=new Scanner(System.in);
String msg=sc.nextLine();
String[] str="分","角","元","十","百","千","万","十","百","千","亿";
String[] str1="零","一","二","三","四","五","六","七","八","九","十";
String[] s=msg.split("\\.");
int j=0;
char temp;
int i;
int p;
for(i=s[0].length()+2,j=0;i>2;i--,j++)
temp=s[0].charAt(j);
String ss=String.valueOf(temp);
p=Integer.valueOf(ss);
System.out.print(str1[p]+str[i-1]);


if(s.length>1)
for(i=s[1].length(),j=0;i>0;i--,j++)
temp=s[1].charAt(j);
String ss=String.valueOf(temp);
p=Integer.valueOf(ss);
System.out.print(str1[p]+str[i-1]);






调试成功!
参考技术C 你是不会写还是要别人帮你写哦??

自己写哈

我反正不的帮帮人写的
不会就问

.直接写会很不好的...

将金额人民币转化为大写

/// <summary>
/// 转换人民币大小金额
/// </summary>
/// <param name="num">金额</param>
/// <returns>返回大写形式</returns>
public static string CmycurD(decimal num)
{
string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字
string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
string str3 = ""; //从原num值中取出的值
string str4 = ""; //数字的字符串形式
string str5 = ""; //人民币大写金额形式
int i; //循环变量
int j; //num的值乘以100的字符串长度
string ch1 = ""; //数字的汉语读法
string ch2 = ""; //数字位的汉字读法
int nzero = 0; //用来计算连续的零值是几个
int temp; //从原num值中取出的值

num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数
str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式
j = str4.Length; //找出最高位
if (j > 15) { return "溢出"; }
str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分

//循环取出每一位需要转换的值
for (i = 0; i < j; i++)
{
str3 = str4.Substring(i, 1); //取出需转换的某一位的值
temp = Convert.ToInt32(str3); //转换为数字
if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
{
//当所取位数不为元、万、亿、万亿上的数字时
if (str3 == "0")
{
ch1 = "";
ch2 = "";
nzero = nzero + 1;
}
else
{
if (str3 != "0" && nzero != 0)
{
ch1 = "零" + str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
ch1 = str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
}
}
else
{
//该位是万亿,亿,万,元位等关键位
if (str3 != "0" && nzero != 0)
{
ch1 = "零" + str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
if (str3 != "0" && nzero == 0)
{
ch1 = str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
if (str3 == "0" && nzero >= 3)
{
ch1 = "";
ch2 = "";
nzero = nzero + 1;
}
else
{
if (j >= 11)
{
ch1 = "";
nzero = nzero + 1;
}
else
{
ch1 = "";
ch2 = str2.Substring(i, 1);
nzero = nzero + 1;
}
}
}
}
}
if (i == (j - 11) || i == (j - 3))
{
//如果该位是亿位或元位,则必须写上
ch2 = str2.Substring(i, 1);
}
str5 = str5 + ch1 + ch2;

if (i == j - 1 && str3 == "0")
{
//最后一位(分)为0时,加上“整”
str5 = str5 + ‘整‘;
}
}
if (num == 0)
{
str5 = "零元整";
}
return str5;
}

以上是关于Java将控制台输入的人民币数字金额转化为大写的主要内容,如果未能解决你的问题,请参考以下文章

在WORD中怎样用VBA将人民币大写金额转换成小写金额

在WORD中怎样用VBA将人民币大写金额转换成小写金额

小写数字自动转换成大写人民币金额两张表怎么在桌面找不同吗?

C语言编程:用指针编程序实现,输入一个人民币小写金额值,转化为大写金额值输出。

Java 关于中文大写金额与阿拉伯数字 互相转换的问题(eclipse版)

用java写一个将大写的MAC地址转化为小写,切把分割用的-转化为:,首先判断输入是不是为MAC地址,在转换