我前天得到老师布置的两个作业,苦想一天不知如何下手,请大家来帮帮忙! 小弟我在次谢谢!!
我不知道用什么方法来把浮点数值转化为中文金额的大写方式,是要用到ASC码吗??怎么用啊???大家只要给出怎么转化的方法代码就可以了,给出全部源代码更好。 (题目如下)编写Applet小程序,实现输入一个浮点数值,将其转化为中文金额的大写方式,如:123.45,转化为:壹佰贰拾叁元肆角伍分。
实验要求:
编写程序实现题意并调试通过,针对以下多种数据情况进一步完善程序。
(1)当金额为整数时,只表示整数部分,省略小数部分,并添加“整”字。
(2)当金额中含有连续的0时,只需写一个“零”即可。如:10005表示为壹万零伍元整。
(3)10的表示。例如:110表示为壹佰壹拾元整,而10表示为拾元整。
我不知道用什么方法来把浮点数值转化为中文金额的大写方式,是要用到ASC码吗??怎么用啊???大家只要给出怎么转化的方法代码就可以了,给出全部源代码更好。 (题目如下)编写Applet小程序,实现输入一个浮点数值,将其转化为中文金额的大写方式,如:123.45,转化为:壹佰贰拾叁元肆角伍分。
实验要求:
编写程序实现题意并调试通过,针对以下多种数据情况进一步完善程序。
(1)当金额为整数时,只表示整数部分,省略小数部分,并添加“整”字。
(2)当金额中含有连续的0时,只需写一个“零”即可。如:10005表示为壹万零伍元整。
(3)10的表示。例如:110表示为壹佰壹拾元整,而10表示为拾元整。
1:把数字分成整数和小数部分,小数部分转换好解决,(0就是整,然后几元几角几分,几为零时略掉)下面是整数部分算法:2:把整数部分从“右”到“左”4位4位截取!然后把截出的数据分别转化,转化后在后面依次加上万,亿,万,亿...(明白吗?^_^)3:转化4位数,前面不足加零(123变成0123),从左到右读过去,把零的略掉,0123=>零千一百二十三 =>一百二十三
然后“组装”好就是答案拉!
//C#源码(测试通过),哈哈,花了我近一个半小时,理应多加100分!
////////////////////////////////////////////////////////////
private string MoneyConv(float flt)
{
try
{
float fOld = flt; string strPostfix = "元整"; string strResult = ""; //转换为string
string strOld = fOld.ToString(); //查找小数点位置
int iRe = strOld.IndexOf('.');
//截取字符串(去掉小数位)
if (iRe > 0)
{
strOld = strOld.Substring(0, iRe);
} //转换为char数组
char[] arrCh = strOld.ToCharArray();
int iLen = arrCh.Length;
string strTemp = ""; //从后往前 //个位
bool oneis0 = (arrCh[iLen-1] == '0');
if (oneis0 == false)
{
strTemp = intToStr(arrCh[iLen-1]).ToString();
} bool tenis0 = true;
if (iLen >= 2)
{
//判断是否为10的情况(共两位)
if (arrCh.Length == 2)
{
//十位为1
if (arrCh[0] == '1')
{
strTemp = "拾";
}
else
{
strTemp = intToStr(arrCh[0]).ToString() + "拾";
} //个位
if (oneis0 == false)
{
strTemp += intToStr(arrCh[1]).ToString();
}
}
else
{ //十位
tenis0 = (arrCh[iLen-2] == '0');
//如果个位和十位都为0,这里就不作操作
if ((oneis0 && tenis0) == false)
{
if (tenis0)
{
strTemp = intToStr(arrCh[iLen-2]) + strTemp;
}
else
{
strTemp = intToStr(arrCh[iLen-2]) + "拾" + strTemp;
}
}
}
} bool hunis0 = true;
if (iLen >= 3)
{
//百位
hunis0 = (arrCh[iLen-3] == '0');
//如果百位和十位都为0,不操作(前面已经处理了)
if ((tenis0 && hunis0) == false)
{
if (hunis0)
{
strTemp = intToStr(arrCh[iLen-3]) + strTemp;
}
else
{
strTemp = intToStr(arrCh[iLen-3])+"佰" + strTemp;
}
}
} if (iLen >= 4)
{
//千位
bool thois0 = (arrCh[iLen-4] == '0');
//同上
if ((thois0 && hunis0) == false)
{
if (thois0)
{
strTemp = intToStr(arrCh[iLen-4])+ strTemp;
}
else
{
strTemp = intToStr(arrCh[iLen-4]) +"仟" + strTemp;
}
}
} if (iLen >= 5)
{
//万位
strTemp = intToStr(arrCh[iLen-5]) +"万" + strTemp;
}
strResult = strTemp; //加上后面的"元整“
strResult += strPostfix;
return strResult;
}
catch (Exception ex)
{
MessageBox.Show("出现异常:"+ex.ToString());
return null;
}
}char intToStr(char i)
{
char temp = '零';
switch (i)
{
case '0':
temp = '零';
break;
case '1':
temp = '壹';
break;
case '2':
temp = '贰';
break;
case '3':
temp = '叁';
break;
case '4':
temp = '肆';
break;
case '5':
temp = '伍';
break;
case '6':
temp = '陆';
break;
case '7':
temp = '柒';
break;
case '8':
temp = '捌';
break;
case '9':
temp = '玖';
break;
default:
throw new Exception("参数错误");
}
return temp;
}
整数部分按个位十位百位...分别以用String或这个String数组表示
再按情况表示出来不就可以了
比如
123.22
百位为1就str1=壹
十位就为2 str2=贰
个位就为3 str3 = 叁
小数部分同理
再整合 str = str1 + "佰" + str2 + "拾" + str3 ........
System.out.println(str);
这只是思路,具体代码的实现自己写吧
* 来个java版本的:)
*/
package util;public class Util {
private final static String[] MANTISSA = {"亿", "万", ""};
private final static String[] UNITS = {"千", "百", "十", ""};
private final static String[] CAPITAL =
{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
/**
* 数字转换为中文的金额大写
* @param money String
* 要求输入的金额只能是***.**格式,如1234.44、23551.00等
* @return String
*/
public final static String Digital2ChCapital(String money){
char c = money.charAt(money.length()-3);
if(money == null || money.length()<4 ||
money.charAt(money.length()-3) != '.'){
System.out.println("金额输入错误!");
return null;
}
int length = money.length();
byte[] bMoney = money.getBytes();
int m = (length-3)/4;
int n = (length-3)%4;
int index = 0;
StringBuffer sbCapital = new StringBuffer();
boolean isZero;
boolean isMZero;
for(int i=0; i<=m; i++){
isMZero = true;
isZero = false;
int bit = (i==0)?n:4;
for(int j = 0; j<bit; j++){
if(bMoney[index]=='0'){
isZero = true;
index++;
}else if(isZero){
sbCapital.append("零");
isZero = false;
isMZero = false;
sbCapital.append(CAPITAL[bMoney[index++]-'0']);
sbCapital.append(UNITS[4-bit+j]);
}else{
isZero = false;
isMZero = false;
sbCapital.append(CAPITAL[bMoney[index++]-'0']);
sbCapital.append(UNITS[4-bit+j]);
}
if(j==bit-1&&i<m && !isMZero){
sbCapital.append(MANTISSA[ (m - i) % 2]);
}
}
}
sbCapital.append("元");
index++;
if(bMoney[index] == '0' && bMoney[index+1] == '0'){
sbCapital.append("整");
}else{
sbCapital.append(CAPITAL[bMoney[index]-'0']);
if(bMoney[index++]!='0'){
sbCapital.append("角");
}
if(bMoney[index]!='0'){
sbCapital.append(CAPITAL[bMoney[index] - '0'] + "分");
}
}
return sbCapital.toString();
}
public static void main(String[] args) {
String capital = Util.Digital2ChCapital("5435510000800078.34");
System.out.println(capital);
}
}/*
* 输出:伍千肆百叁十伍万伍千壹百亿零捌十万零柒十捌元叁角肆分
*/
Delphi改编而得:
Const cNum = "零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分"
Const cCha = "零仟零佰零拾零零零零零亿零万零元亿万零角零分零整-零零零零零亿万元亿零整整"
NtoC = ""
sNum = Trim(Str(Round(n, 2) * 100)) '在这里用Round()四舍五入
For i = 1 To Len(sNum) '逐位转换
NtoC = NtoC + Mid(cNum, (Mid(sNum, i, 1)) + 1, 1) + Mid(cNum, 26 - Len(sNum) + i, 1)
Next
For i = 0 To 11 '去掉多余的零
NtoC = Replace(NtoC, Mid(cCha, i * 2 + 1, 2), Mid(cCha, i + 26, 1))
Next
End Function
import java.awt.*;
public class Money {
String[] chinese = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
String[] unit = {"十", "百", "千", "万", "十万", "百万", "千万", "亿"};
public Money() {
try {
int count = 0;
boolean flag = true;
String strUnit;
String totalMoneyCHN = "";
String strMoney = JOptionPane.showInputDialog(null, "请输入金额");
double dbMoney = Double.parseDouble(strMoney);
char charMoney[] = strMoney.toCharArray();
int position = strMoney.indexOf(".");
if (position == -1) {
position = strMoney.length();
flag = false;
}
for (int i = 0; i < position; i++) {
if ((charMoney[i] + "").equals("0")) {
count = count + 1;
} else {
String strMoneyCHN = chinese[Integer.parseInt(charMoney[i] +
"")];
if (count >= 1) {
strMoneyCHN = "零" + strMoneyCHN;
count = 0;
} if (i == position - 1) {
strUnit = "";
} else {
strUnit = unit[position - i - 2];
}
totalMoneyCHN = totalMoneyCHN + strMoneyCHN + strUnit;
}
}
if (flag) {
totalMoneyCHN = totalMoneyCHN + "点";
char[] charPosition = (strMoney.substring(position + 1,
strMoney.length())).toCharArray();
for (int i = 0; i < charPosition.length; i++) {
totalMoneyCHN = totalMoneyCHN +
chinese[Integer.parseInt(charPosition[i] + "")];
}
System.out.println(totalMoneyCHN);
} } catch (NumberFormatException ex) {
System.out.println("所输入的金额不正确,请重新输入");
ex.printStackTrace();
}
} public static void main(String[] args) {
Money money = new Money();
}
}/**这是我的,不过写得可能会比较乱吧,大概的都实现了,可能会有小BUG