急!!!!求金额转成大写的vc算法(什么时候加整?)!!!

haihong 2000-04-04 04:25:00
...全文
243 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmmyyyaaa 2000-10-03
  • 打赏
  • 举报
回复
以前曾经做过一个MIS,现根据我的记忆,写下来,可能有语法错误.如果有更好的算法,跟我打个招呼
int p=0; num数组的指针
int q=0; s_print数组的指针
int num[10]; 数据在此,num[0]为分,num[1]为角,num[2]为元.....
boolean haveit;
string numset[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
string moneyset[]={"","拾",:佰","仟"};
string s_print[20];要打印的,不过要反过来

//只要不含"分"的均加上整.如贰百叁拾贰元叁角整,叁拾元整
haveit= ( num[0]==0 );
if haveit {s_print[0]="整"; p++;}

//零钱单独处理
if ( num[0]!=0 )
{
s_print[p]="分";p++;
s_print[p]=numset[num[0]];p++;
}
if ( num[1]!=0 )
{
s_print[p]="角";p++;
s_print[p]=numset[num[1]];p++;
}


if ( ( num[q]!=0 )||( num[q+1]!=0 )||( num[q+2]!=0 )||( num[q+3]!=0 ) )
{ s_print[p]="元"; p++; }

if ( num[q]!=0 )
{
// 不是个位 and 本位为0 and 前面还没有零
if ( ((q-2)%4!=0) && (num[q-1]==0) && (s_print[p-1]!="零") )
s_print[p]="零"; p++;

s_print[p]=moneyset[(q-2)%4]; p++; //写拾,佰,千,万
s_print[p]=numset[num[q]]; p++;
}

//以下万级的内容与个级相同,亿级的也如此
if ( ( num[q]!=0 )||( num[q+1]!=0 )||( num[q+2]!=0 )||( num[q+3]!=0 ) )
{ s_print[p]="万"; p++; }

if ( num[q]!=0 )
{
// 不是个位 and 本位为0 and 前面还没有零
if ( ((q-2)%4!=0) && (num[q-1]==0) && (s_print[p-1]!="零") )
s_print[p]="零"; p++;

s_print[p]=moneyset[(q-2)%4]; p++; //写拾,佰,千,万
s_print[p]=numset[num[q]]; p++;
}

kxy 2000-09-25
  • 打赏
  • 举报
回复
function FourNumToChnNum(Str:string;ChnNum:string;var Pre:boolean):string;
const
ChnNum2='零壹贰叁肆伍陆柒捌玖';
var
i,j,Len:integer;
begin
Result := '';
Len := Length(str) ;
for i:=1 to Len do begin
j := Ord(str[i])-48;
if j=0 then
Pre := True
else begin
if Pre then
Result := Result + '零';
Result := Result + Copy(ChnNum2,j*2+1,2) + Trim(Copy(ChnNum,(Len - i) * 2+1,2));
Pre := False;
end;
end;
end;

function StringToChnNum(str:string):string;
const
ChnNum1='圆万亿兆';
var
i,Len,Len1,Level,Start:integer;
s1,s:string;
Pre: Boolean;
begin
Result := '';
Len := Pos('.',str)-1;
Level := (Len + 3) div 4 ;
Len1 := Len mod 4 ;
if Len1=0 then
Len1 := 4;
Start := 1;
Pre := False;
for i := 1 to Level do begin
s := Copy(str,Start,Len1);
s1 := FourNumToChnNum(s,' 拾佰仟',Pre); // 注意有两个空格
if s1<>'' then
Result := Result + s1 + Copy(ChnNum1,(Level-i)*2+1,2);;
Start := Start + Len1;
Len1 := 4;
end;
s1 := FourNumToChnNum(Copy(str,Len+2,2),'分角',Pre);
if s1 = '' then
s1 := '整';
Result := Result + s1 ;
end;

function RealToChnNum(realnum:real;Width:integer):string;
var
s:string;
begin
Str(realnum:Width:2,s);
Result := StringToChnNum(Trim(s));
end;
mutant 2000-04-10
  • 打赏
  • 举报
回复
以下是一个Delphi源码,希望对你有帮助,虽然只能转换整形
function ChinaNum(X: Int64):string;
const
positions:Array[1..4] of string=( '仟','佰','拾','' );//四位一组的后缀
digits :Array[0..9] of string=( '零', '壹', '贰', '叁', '肆',
'伍', '陆', '柒', '捌', '玖');//大写定义
var
S,tmp: string;
Str: Array[1..4] of String;
Num: Array[1..4] of Integer;
ChinaNum: Array[1..4] of String;
I,J,K: Integer;
begin
if X>9999999999999999 then begin
Result:= '超出范围';
Exit;
end;
S:=format('%16u',[x]);//将数字转化为16位长度的字符串(不足添空格)
result:='';//返回值
ChinaNum[1]:='京';//单位
ChinaNum[2]:='亿';
ChinaNum[3]:='万';
ChinaNum[4]:='';
For I:= 1 to 4 do begin
Str[I]:= Copy(S, (I shl 2)-3,4);//字符串拷贝从(i shl 2)-3的位置开始的4个.i shl 2 表示左移2位
if Str[I]='0000' then begin
Str[I]:=' ';
Continue;
end
else begin
J:=Pos('000',Str[I]);
case J of
0: begin
J:=Pos('00', Str[I]);
Case J of
0:;
else Str[I,J]:=' ';
end;
end;
else begin
Str[I,J]:=' ';
Str[I,J+1]:=' ';
end;
end;
if Str[I,4]='0' then
Str[I,4]:=' ';
end;
end;

For I:= 1 to 4 do begin
For J:= 4 Downto 1 do begin
case Str[I,J] of
'0': ChinaNum[I]:='零'+ChinaNum[I];
'1'..'9': begin
ChinaNum[I]:=Digits[Ord(Str[I,J])-48]+Positions[J]+ChinaNum[I];//Ord函数 取字符ASCII码
end;
else;
end;
end;
if (I=4)Or(Length(ChinaNum[I])>2) then begin
Result:= Result+ ChinaNum[I];
end;
end;
if Result='' then
Result:='零';
end;
Sniper 2000-04-10
  • 打赏
  • 举报
回复
能把你的意思说请楚一点吗?
river99 2000-04-10
  • 打赏
  • 举报
回复
加整是否指在金额后加"整",只要转换的金额不带分,一律要加整字,至于浮点运算的问题可以用cell和floor两个函数解决。前提条件是必须将金额转换为整形,采用金额*100可以解决问题。按照中国的计算方法。在元以上的单位必须四位一组划分。最头痛的是0的转换问题(连续的0和单独0的转换不一样).
zzh 2000-04-08
  • 打赏
  • 举报
回复
我曾经看到一编文章,VC进行浮点运算有一个BUG,在把浮点数转换为整数时会出现相差1的情况,你就座注意这个问题,至于这种转换算法,应该是比较简单的了,用Case语句一下子不就实现了?
laole 2000-04-05
  • 打赏
  • 举报
回复
呵呵,这个不难吧?先找出来小数点的位置,然后以它为坐标进行一种变换就是了。
当然你还要定出小数点前的位数,根据位数的多少再来定出级别。
至于正的说法,只需要对小数点后面的数字进行判断就是了。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧