小写金额-》大写金额 (50分)

  • 主题发起人 主题发起人 Carson_zzd
  • 开始时间 开始时间
C

Carson_zzd

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能给一份C#中小写金额-》大写金额的程序代码,谢了!
例如:12.23-》十二元二角三分
 
C#中没有大小写转化函数?
 
非常简单。
比如你定义一个string
string myString="aBcDe";
转换成为大写就可以myString.ToUpper
转换成为小写就可以myString.ToLower
注意,C#中不再有什么函数,要么就是类的静态函数static
你多多了解一下NET Framework 类库,强烈建议你安装一个MSDN2003简体中文版本,
里面的C#的帮助全部是中文的。
我摘抄一段给你看看。
.NET Framework 类库
String 成员请参见
String 类 | System 命名空间 | C++ 托管扩展编程
String 概述
公共构造函数
String 构造函数
受 .NET Framework 精简版的支持。
已重载。初始化 String 类的新实例。
公共字段
Empty
受 .NET Framework 精简版的支持。
表示空字符串。此字段为只读字段。
公共属性
Chars 获取此实例中位于指定字符位置的字符。
在 C# 中,该属性为 String 类的索引器。

Length
受 .NET Framework 精简版的支持。
获取此实例中的字符数。
公共方法
Clone
受 .NET Framework 精简版的支持。
返回对此 String 实例的引用。
Compare
受 .NET Framework 精简版的支持。
已重载。比较两个指定的 String 对象。
CompareOrdinal
受 .NET Framework 精简版的支持。
已重载。通过计算每个字符串中相应 Char 对象的数值来比较两个 String 对象。
CompareTo
受 .NET Framework 精简版的支持。
已重载。将此实例与指定的对象进行比较。
Concat
受 .NET Framework 精简版的支持。
已重载。连接 String 的一个或多个实例,或 Object 的一个或多个实例的值的 String 表示形式。
Copy
受 .NET Framework 精简版的支持。
创建一个与指定的 String 具有相同值的 String 的新实例。
CopyTo
受 .NET Framework 精简版的支持。
将指定数目的字符从此实例中的指定位置复制到 Unicode 字符数组中的指定位置。
EndsWith
受 .NET Framework 精简版的支持。
确定此实例的末尾是否与指定的 String 匹配。
Equals
受 .NET Framework 精简版的支持。
已重载。已重写。确定两个 String 对象是否具有相同的值。
Format
受 .NET Framework 精简版的支持。
已重载。将指定的 String 中的每个格式项替换为相应对象的值的文本等效项。
GetEnumerator 检索一个可以循环访问此实例中的每个字符的对象。
GetHashCode
受 .NET Framework 精简版的支持。
已重写。返回该实例的哈希代码。
GetType(从 Object 继承)
受 .NET Framework 精简版的支持。
获取当前实例的 Type。
GetTypeCode
受 .NET Framework 精简版的支持。
返回类 String 的 TypeCode。
IndexOf
受 .NET Framework 精简版的支持。
已重载。报告 String 在此实例中的第一个匹配项的索引或一个或多个字符的索引。
IndexOfAny
受 .NET Framework 精简版的支持。
已重载。报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的索引。
Insert
受 .NET Framework 精简版的支持。
在此实例中的指定索引位置插入一个指定的 String 实例。
Intern
受 .NET Framework 精简版的支持。
检索系统对指定 String 的引用。
IsInterned
受 .NET Framework 精简版的支持。
检索对指定 String 的引用。
Join
受 .NET Framework 精简版的支持。
已重载。在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串。
LastIndexOf
受 .NET Framework 精简版的支持。
已重载。报告指定的 Unicode 字符或 String 在此实例中的最后一个匹配项的索引位置。
LastIndexOfAny
受 .NET Framework 精简版的支持。
已重载。报告在 Unicode 数组中指定的一个或多个字符在此实例中的最后一个匹配项的索引位置。
PadLeft
受 .NET Framework 精简版的支持。
已重载。右对齐此实例中的字符,在左边用空格或指定的 Unicode 字符填充以达到指定的总长度。
PadRight
受 .NET Framework 精简版的支持。
已重载。左对齐此字符串中的字符,在右边用空格或指定的 Unicode 字符填充以达到指定的总长度。
Remove
受 .NET Framework 精简版的支持。
从此实例中的指定位置开始删除指定数目的字符。
Replace
受 .NET Framework 精简版的支持。
已重载。将此实例中的指定 Unicode 字符或 String 的所有匹配项替换为其他指定的 Unicode 字符或 String。
Split
受 .NET Framework 精简版的支持。
已重载。标识此实例中的子字符串(它们由数组中指定的一个或多个字符进行分隔),然后将这些子字符串放入一个 String 数组中。
StartsWith
受 .NET Framework 精简版的支持。
确定此实例的开始处是否与指定的 String 匹配。
Substring
受 .NET Framework 精简版的支持。
已重载。从此实例检索子字符串。
ToCharArray
受 .NET Framework 精简版的支持。
已重载。将此实例中的字符复制到 Unicode 字符数组。
ToLower
受 .NET Framework 精简版的支持。
已重载。返回此 String 的小写形式的副本。
ToString
受 .NET Framework 精简版的支持。
已重载。已重写。将此实例的值转换为 String。
ToUpper
受 .NET Framework 精简版的支持。
已重载。返回此 String 的大写形式的副本。
Trim
受 .NET Framework 精简版的支持。
已重载。从此实例的开始位置和末尾移除一组指定字符的所有匹配项。
TrimEnd
受 .NET Framework 精简版的支持。
从此实例的结尾移除数组中指定的一组字符的所有匹配项。
TrimStart
受 .NET Framework 精简版的支持。
从此实例的开始位置移除数组中指定的一组字符的所有匹配项。
公共运算符
相等运算符
受 .NET Framework 精简版的支持。
确定两个指定的 String 对象是否具有同一值。
不等运算符
受 .NET Framework 精简版的支持。
确定两个指定的 String 对象是否具有不同的值。
受保护的方法
Finalize(从 Object 继承)
受 .NET Framework 精简版的支持。
已重写。允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。
在 C# 和 C++ 中,使用析构函数语法来表示终结程序。

MemberwiseClone(从 Object 继承)
受 .NET Framework 精简版的支持。

 
我要的是金额方面的转换,并不是字母大小写的转换!
 
function My_StrToRMB(curs: string) :string ;
var
daxie,danwei,minuscurs:string;
i,j,deccount :integer ;
rmb :int64;
begin
curs:=trim(curs);
if (curs='-') or (curs='.') or (curs='') then
// '.','-',''错
begin
result:='ERROR';
exit;
end;
deccount :=0;
for i:=1 to length(curs)do
begin
if not (curs in ['0'..'9','.','-']) then
//'123w2'错
begin
result:='ERROR';
exit;
end;
if (curs='.') and (deccount>0) then
//'12313.324.23'错
begin
result:='ERROR';
exit;
end;
if (curs='-') and (i>1) then
//'-123-123'错
begin
result:='ERROR';
exit;
end;
if curs='.' then
inc(deccount);
end;
rmb:=round(StrToFloat(curs)*100);
minuscurs:='';
//负数标志
if rmb<0 then
begin
minuscurs:='(负数)' ;
rmb:=(-1)*rmb;
end;
if rmb>=1E18 then
//超过9千万亿
begin
result:='ERROR';
exit;
end;
curs:='';
i:=0;
while rmb>0do
begin
j:= rmb mod 10;
case j of
0 : daxie :='零' ;
1 : daxie :='壹' ;
2 : daxie :='贰' ;
3 : daxie :='叁' ;
4 : daxie :='肆' ;
5 : daxie :='伍' ;
6 : daxie :='陆' ;
7 : daxie :='柒' ;
8 : daxie :='捌' ;
9 : daxie :='玖' ;
end;
case i of
0 : danwei :='分' ;
1 : danwei :='角' ;
2 : danwei :='圆' ;
3 : danwei :='拾' ;
4 : danwei :='佰' ;
5 : danwei :='仟' ;
6 : danwei :='万' ;
7 : danwei :='拾' ;
8 : danwei :='佰' ;
9 : danwei :='仟' ;
10 : danwei :='亿' ;
11 : danwei :='拾' ;
12 : danwei :='佰' ;
13 : danwei :='仟' ;
14 : danwei :='万' ;
15 : danwei :='拾' ;
16 : danwei :='佰' ;
17 : danwei :='仟' ;
end;
rmb:=rmb div 10;
if j<>0 then
curs:=daxie+danwei+curs;
//该位上不为0
if (j=0) and (not (i in [2,6,10,14])) then
//该位为0,是一般位
curs:=daxie+curs;
if (j=0) and (i in [2,6,10,14]) then
//该位为0,是敏感位
curs:=danwei+curs;
inc(i);
end;
while pos('零零',curs)>0 do
curs:=stringreplace(curs,'零零','零',[]);
curs:=stringreplace(curs,'零圆','圆',[]);
while pos('零万',curs)>0 do
curs:=stringreplace(curs,'零万','万',[]);
//上万亿后可能两个'零万'
curs:=stringreplace(curs,'零亿','亿',[]);
curs:=stringreplace(curs,'角零','角',[]);
if copy(curs,length(curs)-3,4)='圆零' then
//最后两位是圆零.
curs:=stringreplace(curs,'圆零','圆整',[]);
//小数点后
curs:=stringreplace(curs,'亿万','亿',[]);
result:=minuscurs+curs;


自国人接触“数据库”以来,这个函数就被无数人写过,下列代码是否最短、算法是否最合理呢?请指教。
Function NtoC( n0 :Extended) :wideString;
//人民币金额大小写转换函数(如发现更为精简的,请告诉我)
//作者:方小庆(上海) inrm@263.net
Function IIF(b :boolean;
s1,s2 :string):string;
begin
{本函数在VFP和VB里均为内部函数}
if b then
IIF:=s1 else
IIF:=s2;
end;
Const c:WideString = ’零壹贰叁肆伍陆柒捌玖◇分角元拾佰仟万拾佰仟亿拾佰仟万’;
var L,i,n :integer;
Z,a :boolean;
s, st :WideString;
begin
s:= FormatFloat(’0’,n0*100);
L:= Length(s);
Z:= false;
For i:=1 to Ldo
begin
n:= ord( s[L-i+1])-48;// StrToInt( s[L-i+1]);
a:= (i=11)or(i=7)or(i=3)or(i=1);
//亿、万、元、分位
st:=IIF((n=0)and(Z or a), ’’, c[n+1]) //数值
+ IIF((n=0)and(i=1),’整’, //分位为零
IIF((n>0)or a, c[i+11], ’’)) //单位
+ IIF((n=0)and(not Z)and(i>1)and a,’零’,’’) //亿、万、元位为零而千万、千、角位不为零
+ st;
Z:= n=0;
end;
For i:=1 To Length(st)do
If Copy(st,i,2)=’亿万’ then
Delete(st,i+1,1);
//亿位和万位之间都是零时会出现’亿万’
result:= IIF(n0>9999999999999.99, ’溢出’, IIf(n0 = 0, ’零’, st));
end;
这里有两种方法,用delphi写的代码给你了,该怎么处理自己解决。

 
DELPHI代码,自己改成C#的,应该很简单就可以改好吧:
function TCodeDM.GetD2C(S: String): String;
// 人民币金额大写函数
var i, ii: Integer;
SS, DXJE, ZFH: String;
begin
ii := StrLen(Pchar(S));
//字符串长度
for i:=0 to ii-1do
//获得整数位长度:扫描字符串,直到遇到小数点 '.'
if (Copy(S,i+1,1) = '.') //i: 整数部分长度计数器
then
Break;
//处理小数部分
DXJE := '';
if ii-i=0 then
//没有小数点和后面的两个零
begin
DXJE := '零分';
DXJE := '零角'+DXJE;
end;
if ii-i=2 then
//没有分位数
begin
DXJE := '零分';
DXJE := GetL2U(StrToInt(Copy(S,ii,1)))+'角'+DXJE;
end;
if ii-i=3 then
begin
DXJE := GetL2U(StrToInt(Copy(S,ii,1)))+'分';
DXJE := GetL2U(StrToInt(Copy(S,ii-1,1)))+'角'+DXJE;
end;

//处理整数部分
S := Copy(S, 1, i);
//取原字符串的整数部分
if Copy(S, 1, 1)='-' //负数处理
then
begin
ZFH := '(负)';
S := Copy(S, 2, i);
//取原字符串中不包含'-'号的整数部分
i := i-1;
//调整整数部分长度计数
end
else
ZFH := '';
//字符串S倒置装入SS
ii := i;
//保留字符串长度计数到ii
SS := '';
for i:=iido
wnto 1do
SS := SS + Copy(S, i, 1);
for i:=1 to iido
case i of
1: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'元'+DXJE;
2: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'拾'+DXJE;
3: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'佰'+DXJE;
4: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'仟'+DXJE;
5: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'万'+DXJE;
6: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'拾'+DXJE;
7: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'佰'+DXJE;
8: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'仟'+DXJE;
9: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'亿'+DXJE;
10: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'拾'+DXJE;
11: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'佰'+DXJE;
12: DXJE := GetL2U(StrToInt(Copy(SS,i,1)))+'仟'+DXJE;
end;
Result := '总计金额大写:'+ZFH+DXJE;
end;

function TCodeDM.GetL2U(S: Integer): String;
begin
case S of
0: Result := '零';
1: Result := '壹';
2: Result := '贰';
3: Result := '叁';
4: Result := '肆';
5: Result := '伍';
6: Result := '陆';
7: Result := '柒';
8: Result := '捌';
9: Result := '玖';
end;
end;
 
谢谢各位的帮助,不过Delphi写的代码我也有,就是不行费时间修改!
呵呵,不知那位仁兄已经有修改完成的。我就不用浪费没有必要的时间了!
 
private string NumToStr(int N_Value)
{
string[] tbl_Num = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玫"};
string[] tbl_Bit = {"元", "十", "佰", "仟", "万", "十", "佰", "仟", "亿"};
string s = "";
int t, i = 0;
t = N_Value;
while (t != 0)
{
s = tbl_Num[t % 10] + tbl_Bit + s;
i++;
t = t / 10;
}
return s;
}
以上只实现正整数的转换,根据此方法可以很容易地实现浮点数的转换!
 
to zhanweixin,
如果位数过长,出现错误!
 
谢谢大家了!
 
多人接受答案了。
 
后退
顶部