<tr height="25">
<td><div align=center>总金额</div></td>
<td> 佰 拾 万 仟 佰 拾 元 角 分</td>
<td>¥<%=new java.math.BigDecimal(String.valueOf(sum))%></td>
</tr><%=new java.math.BigDecimal(String.valueOf(sum))%>,这是一个带2位小数的
不固定值.要把它的大写金额按上面方式表示出来。
琢磨好久,都不知道怎么做,恳请哪位前辈帮小弟写个方法,谢谢!
<td><div align=center>总金额</div></td>
<td> 佰 拾 万 仟 佰 拾 元 角 分</td>
<td>¥<%=new java.math.BigDecimal(String.valueOf(sum))%></td>
</tr><%=new java.math.BigDecimal(String.valueOf(sum))%>,这是一个带2位小数的
不固定值.要把它的大写金额按上面方式表示出来。
琢磨好久,都不知道怎么做,恳请哪位前辈帮小弟写个方法,谢谢!
n = {一到十的大写} 的字符串
m = {拾佰仟万} 的字符串
str = ""
for(i: index->0 )
str = n[i位数字-1]+m[i]+str;for(i: index->length-1)
str += n[i位数字-1]可能用javascript更好些
先将int n=(int)f*100;
int i=n%10;//这是分的
int y=n/10;//这是角的
int x=n/100;//这是元的
如此类推了,
这是我的想法,如有不对请不要骂,还请其它前辈斧正!!
我这里有一段用在 delphi 的 Fastreport里的代码,你可以参考一下,用java写 t_num[0] :='零';
t_num[1] :='壹';
t_num[2] :='贰';
t_num[3] :='叁';
t_num[4] :='肆';
t_num[5] :='伍';
t_num[6] :='陆';
t_num[7] :='柒';
t_num[8] :='捌';
t_num[9] :='玖';
t_unit1[0] := '元';
t_unit1[1] := '万';
t_unit1[2] := '亿';
t_unit1[3] := '万';
t_unit1[4] := '亿'; t_unit2[0] :='拾';
t_unit2[1] := '佰';
t_unit2[2] := '仟';
t_unit3[0] :='角';
t_unit3[1] :='分'; sInt :='';
sFlt := '';
sNegative:=''; szCurrency := FormatFloat('0.00',SUM([rsPrint2."Amount"])); // 小数点后必须有两位
dotPos := Pos('.', szCurrency);
szInt := Copy(szCurrency, 1, dotPos - 1);
szFlt := Copy(szCurrency, dotPos + 1, 2); if (szInt = '0') and (szFlt = '00') then
begin
RMBBig2.memo := '人民币零元整';
exit;
end; szIntCount := Length(szInt); if copy(szInt,1,1)='-' then
begin
szIntCount := szIntCount-1;
szInt := copy(szInt,2,szIntCount);
sNegative := '负';
end; if szInt <> '0' then // 如果整数部分为零,则不对其进行处理
begin
old_inx_num := 0;
for i := 0 to szIntCount - 1 do
begin
inx_num := Str(Copy(szInt,szIntCount - i,1));
if i mod 4 = 0 then
begin // 处理 圆,万,亿
inx_unit := Int(i / 4);
if (inx_num > 0) then // 不是零
// 以下判断处理诸如"壹亿圆",“壹亿万圆"
if ((inx_unit > 0) and (inx_unit mod 2 = 0) and (sInt[1] + sInt[2] = '万')) then
sInt := t_num[inx_num] + t_unit1[inx_unit] + copy(sInt, 3, 2 * (Length(sInt) - 1))
else
sInt := t_num[inx_num] + t_unit1[inx_unit] + sInt
else // 是零
// 以下判断处理诸如"壹拾亿圆“,"壹拾亿万圆"
if ((inx_unit > 0) and (inx_unit mod 2 = 0) and (sInt[1] + sInt[2] = '万')) then
sInt := t_unit1[inx_unit] + copy(sInt, 3, 2 * (Length(sInt) - 1))
else
sInt := t_unit1[inx_unit] + sInt ;
end
else
begin // 处理 拾,佰,仟
inx_unit := i mod 4 - 1;
if inx_num > 0 then // 不是零
sInt := t_num[inx_num] + t_unit2[inx_unit] + sInt
else // 是零
if old_inx_num > 0 then // 前面这位不是零
sInt := t_num[inx_num] + sInt; // 写零
//else 忽略多个零
end;
old_inx_num := inx_num;
end;
end; //处理小数部分
if (szFlt <> '00') then
begin
for i := 0 to 1 do
begin
inx_num := Str(copy(szFlt,i + 1,1));
if (inx_num > 0) then
sFlt := sFlt + t_num[inx_num] + t_unit3[i]
else
if (i <> 1) then // 如果"角"为0 (分"是 0, 则忽略)
if (sInt <> '') then // 如果整数为此时为零
sFlt := sFlt + t_num[inx_num];
end;
RMBBig2.memo := sNegative + sInt + sFlt;
end
else
RMBBig2.memo := sNegative + sInt + '整';
{
public static void main(String arg[])
{
String s="51344549";
int len=s.length();
int number[]={0,1,2,3,4,5,6,7,8,9};
char word[]={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖',};
char unit[]={' ',' ','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'};
int x[]=new int[20];
for(int i=0;i<len;i++)
{
x[i]=s.charAt(i)-48;//'4'和4相差48
//System.out.print(x[i]);
for(int j=0;j<10;j++)
{
if(x[i]==number[j])
{
if(j!=0)
{
System.out.print(word[j]);
System.out.print(unit[len-i]);
}else{
System.out.print("零");
}
}
}
}
}
};
String [] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String [] unit = {"","","拾","佰","仟","万"};
String [] currency = {"元","角","分"};
String result = "";
String inputStr = null;
int leng = input.length();
int dot = -1;
for (int i = 0; i < leng; i++) {
char c = input.charAt(i);
if (c == '.') {
dot = i;
break;
}
}
inputStr = input;
if (dot != -1) {
inputStr = input.substring(0,dot);
}
int wanCount = leng / 4 ;
int remain = leng % 4;
if (remain == 0) {
wanCount -= 1;
}
for (int i = 0; i < wanCount; i++) {
if (i == 0 && remain != 0) {
for (int j = 0; j < remain; j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
int pos2 = remain - j;
result += num[pos] + unit[pos2];
}
inputStr = inputStr.substring(remain);
result += unit[5];
}
else {
for (int j = 0; j < 4; j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
int pos2 = 4 - j;
result += num[pos] + unit[pos2];
}
inputStr = inputStr.substring(4);
result += unit[5];
}
}
for (int j = 0; j < inputStr.length(); j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
int pos2 = inputStr.length() - j;
result += num[pos] + unit[pos2];
}
result += currency[0];
if (dot != -1) {
inputStr = input.substring(dot + 1);
if (inputStr.length() > 2) {
if (inputStr.charAt(2) - '0' > 4) {
int t = inputStr.charAt(1) - '0' + 1;
inputStr = inputStr.charAt(0) + "" + t;
}
else {
inputStr = inputStr.substring(0,2);
}
}
for (int i = 0; i < inputStr.length(); i++) {
char c = inputStr.charAt(i);
int pos = c - '0';
result += num[pos] + currency[i + 1];
}
}
return result;
}
俺随便敲的,经过测试可以使用, 自动四舍五入
String [] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String [] unit = {"","","拾","佰","仟","万"};
String [] currency = {"元","角","分"};
String result = "";
String inputStr = null;
int leng = input.length();
int dot = -1;
for (int i = 0; i < leng; i++) {
char c = input.charAt(i);
if (c == '.') {
dot = i;
break;
}
}
inputStr = input;
if (dot != -1) {
inputStr = input.substring(0,dot);
}
leng = inputStr.length();
int wanCount = leng / 4 ;
int remain = leng % 4;
if (remain == 0) {
wanCount -= 1;
}
for (int i = 0; i < wanCount; i++) {
if (i == 0 && remain != 0) {
for (int j = 0; j < remain; j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
int pos2 = remain - j;
result += num[pos] + unit[pos2];
}
inputStr = inputStr.substring(remain);
result += unit[5];
}
else {
for (int j = 0; j < 4; j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
int pos2 = 4 - j;
result += num[pos] + unit[pos2];
}
inputStr = inputStr.substring(4);
result += unit[5];
}
}
for (int j = 0; j < inputStr.length(); j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
int pos2 = inputStr.length() - j;
result += num[pos] + unit[pos2];
}
result += currency[0];
if (dot != -1) {
inputStr = input.substring(dot + 1);
if (inputStr.length() > 2) {
if (inputStr.charAt(2) - '0' > 4) {
int t = inputStr.charAt(1) - '0' + 1;
inputStr = inputStr.charAt(0) + "" + t;
}
else {
inputStr = inputStr.substring(0,2);
}
}
for (int i = 0; i < inputStr.length(); i++) {
char c = inputStr.charAt(i);
int pos = c - '0';
result += num[pos] + currency[i + 1];
}
}
return result;
}
sorry 丢了一句重要的赋值语句
补上了 呵呵
String [] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String [] unit = {"","","拾","佰","仟","万"};
String [] currency = {"元","角","分"};
String result = "";
String inputStr = null;
if (input.startsWith("-") || input.startsWith("0")) {
input = input.substring(1);
}
int leng = input.length();
int dot = -1;
for (int i = 0; i < leng; i++) {
char c = input.charAt(i);
if (c == '.') {
dot = i;
break;
}
}
inputStr = input;
if (dot != -1) {
inputStr = input.substring(0,dot);
}
leng = inputStr.length();
int wanCount = leng / 4 ;
int remain = leng % 4;
if (remain == 0) {
wanCount -= 1;
}
for (int i = 0; i < wanCount; i++) {
if (i == 0 && remain != 0) {
for (int j = 0; j < remain; j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
if (pos == 0) {
if (!result.endsWith(num[0])) {
result += num[0];
}
continue;
}
int pos2 = remain - j;
result += num[pos] + unit[pos2];
}
inputStr = inputStr.substring(remain);
if (result.endsWith(num[0])) {
result = result.substring(0,result.length() - 1);
}
result += unit[5];
}
else {
for (int j = 0; j < 4; j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
if (pos == 0) {
if (!result.endsWith(num[0])) {
result += num[0];
}
continue;
}
int pos2 = 4 - j;
result += num[pos] + unit[pos2];
}
inputStr = inputStr.substring(4);
if (result.endsWith(num[0])) {
result = result.substring(0,result.length() - 1);
}
result += unit[5];
}
}
for (int j = 0; j < inputStr.length(); j++) {
char c = inputStr.charAt(j);
int pos = c - '0';
if (pos == 0) {
if (!result.endsWith(num[0])) {
result += num[0];
}
continue;
}
int pos2 = inputStr.length() - j;
result += num[pos] + unit[pos2];
}
if (result.endsWith(num[0])) {
result = result.substring(0,result.length() - 1);
}
result += currency[0];
if (dot != -1) {
inputStr = input.substring(dot + 1);
if (inputStr.length() > 2) {
if (inputStr.charAt(2) - '0' > 4) {
int t = inputStr.charAt(1) - '0' + 1;
inputStr = inputStr.charAt(0) + "" + t;
}
else {
inputStr = inputStr.substring(0,2);
}
}
for (int i = 0; i < inputStr.length(); i++) {
char c = inputStr.charAt(i);
int pos = c - '0';
if (pos == 0) {
continue;
}
result += num[pos] + currency[i + 1];
}
}
return result;
}完美版
代码如下,不妥之处还望指正:(数值带2位小数)
package com.system;import java.util.*;
import java.lang.*;
import java.io.*;
public class SumBean
{
public String change(String str)
{
int str_length=str.length(); String mount[]={"","","","","","","","","","","","","","",""};
for(int i=str_length,n=14;i>0;i--,n--)
{
mount[n]=str.substring(i-1,i);
} for(int i=0;i<15;i++)
{
if(!mount[i].equals("") && !mount[i].equals("."))
{
if(mount[i].equals("0"))
mount[i]="零";
else if(mount[i].equals("1"))
mount[i]="壹";
else if(mount[i].equals("2"))
mount[i]="贰";
else if(mount[i].equals("3"))
mount[i]="叁";
else if(mount[i].equals("4"))
mount[i]="肆";
else if(mount[i].equals("5"))
mount[i]="伍";
else if(mount[i].equals("6"))
mount[i]="陆";
else if(mount[i].equals("7"))
mount[i]="柒";
else if(mount[i].equals("8"))
mount[i]="捌";
else if(mount[i].equals("9"))
mount[i]="玖";
else
mount[i]="";
}
else
mount[i]="";
}
String result="";
result=" "+mount[5]+" 佰 "+mount[6]+" 拾 "+mount[7]+" 万 "+mount[8]+" 仟 "+mount[9]+" 佰 "+mount[10]+" 拾 "+mount[11]+" 元 "+mount[13]+" 角 "+mount[14]+" 分";
return result;
}
};
{ private string[] big1={"零","壹","贰","参","肆","伍","陆","柒","捌","玖"};
private string[] big2={"元","拾","百","千","万","拾","百","千","亿","拾","百","千"};
/// <summary>
/// convert the little number to big number,只能到千亿位。
/// </summary>
/// <param name="littleString"></param>
/// <returns></returns> public string LittleToBig(string littleString)
{
int numLen=littleString.Length ;
int level=0;
string tempNum="";
string tempValue="";
string tempString="";
string fullBigString="";
string resultTemp=""; //每次提取四个字符从后面开始提取。
for(int i=numLen-1;i>0;i-=4)
{
if(i>=4)
{
//MessageBox.Show (littleString.Substring (i-3,4)); //将一小段小写数字变成大写数字。
tempString=littleString.Substring (i-3,4);
}
else
{
tempString=littleString.Substring (0,i+1); //MessageBox.Show (littleString.Substring (0,i+1));
} tempNum=ConvertNumToBig(tempString); if(tempNum.Length ==1 && level==0)
{
tempNum="零"+tempNum; //在第一小串字符中如果个位前没有数了,则要在个位前补一个零。 }
tempValue=big2[level*4];
if(tempNum=="零")
{
resultTemp=""; }
else
{
resultTemp= tempNum+tempValue;
}
fullBigString=resultTemp+fullBigString;
level=level+1;
} if((fullBigString.Length ==3)&&(fullBigString.Substring (0,1)=="零"))
{
fullBigString=fullBigString.Substring (1,2);
}
return fullBigString;
}
/// <summary>
/// Util function. Convert a little number string to a big number string
/// if All if "零" 则返回一个零。否则返回对应的大写数字字符串。并且数字之间有相连
/// 的两个或多个零的话,要变成一个零。
/// </summary>
/// <param name="subLittelString"></param>
/// <returns></returns>
private string ConvertNumToBig(string subLittleString)
{
string subString1=subLittleString;
String returnString="";
string preChar="零"; //相当于后面只有在有数字后才会再将出现的零加入到字符串中。
string tempNumChar="";
string tempValueChar=""; int pos=subString1.Length-1; foreach(char tempChar in subLittleString)
{
if(pos>0)
tempValueChar=big2[pos];
else
tempValueChar="";
pos--;
tempNumChar=big1[int.Parse (tempChar.ToString ())];
if(tempNumChar=="零")
{
if(preChar!="零")
{
preChar="零";
returnString=returnString+tempNumChar; //每一个零要相加
}
}
else
{
preChar=tempNumChar;
if(pos>=0)
{
tempNumChar=tempNumChar+tempValueChar;
}
returnString=returnString+tempNumChar;
} } if(returnString.Length >0)
{
if(returnString.Substring (returnString.Length -1,1)=="零")
{
returnString=returnString.Substring (0,returnString.Length -1);
} return returnString;
} return "零"; //在所有数字都为零的情况下返回一个零。
}
}
我要处理的数据是带2位小数的(固定了的),比如5004.00,这样算出来的结果是没有问题的