求将人民币的数字表示转化成大写表示的vb.net代碼.

nnh 2004-04-13 11:04:34
如上.
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyongbiao 2004-06-30
  • 打赏
  • 举报
回复
Mark UP!!!
nnh 2004-04-16
  • 打赏
  • 举报
回复
有沒有vb的呀.C#的我看不明白.
xaodoudou 2004-04-16
  • 打赏
  • 举报
回复
这是我下的一个高手的 记不清是谁写的了
using System;

namespace gm
{
/// <summary>
/// 功能:字符串处理函数集
/// </summary>
public class DealString
{
#region 私有成员
/// <summary>
/// 输入字符串
/// </summary>
private string inputString=null;
/// <summary>
/// 输出字符串
/// </summary>
private string outString=null;
/// <summary>
/// 提示信息
/// </summary>
private string noteMessage=null;
#endregion

#region 公共属性
/// <summary>
/// 输入字符串
/// </summary>
public string InputString
{
get{return inputString;}
set{inputString=value;}
}
/// <summary>
/// 输出字符串
/// </summary>
public string OutString
{
get{return outString;}
set{outString=value;}
}
/// <summary>
/// 提示信息
/// </summary>
public string NoteMessage
{
get{return noteMessage;}
set{noteMessage=value;}
}
#endregion

#region 构造函数
public DealString()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#endregion

#region 公共方法
public void ConvertToChineseNum()
{
string numList="零壹贰叁肆伍陆柒捌玖";
string rmbList = "分角元拾佰仟万拾佰仟亿拾佰仟万";
double number=0;
string tempOutString=null;

try
{
number=double.Parse(this.inputString);
}
catch
{
this.noteMessage="传入参数非数字!";
return;
}

if(number>9999999999999.99)
this.noteMessage="超出范围的人民币值";

//将小数转化为整数字符串
string tempNumberString=Convert.ToInt64(number*100).ToString();
int tempNmberLength=tempNumberString.Length;
int i=0;
while(i<tempNmberLength)
{
int oneNumber=Int32.Parse(tempNumberString.Substring(i,1));
string oneNumberChar=numList.Substring(oneNumber,1);
string oneNumberUnit=rmbList.Substring(tempNmberLength-i-1,1);
if(oneNumberChar!="零")
tempOutString+=oneNumberChar+oneNumberUnit;
else
{
if(oneNumberUnit=="亿"||oneNumberUnit=="万"||oneNumberUnit=="元"||oneNumberUnit=="零")
{
while (tempOutString.EndsWith("零"))
{
tempOutString=tempOutString.Substring(0,tempOutString.Length-1);
}

}
if(oneNumberUnit=="亿"||(oneNumberUnit=="万"&&!tempOutString.EndsWith("亿"))||oneNumberUnit=="元")
{
tempOutString+=oneNumberUnit;
}
else
{
bool tempEnd=tempOutString.EndsWith("亿");
bool zeroEnd=tempOutString.EndsWith("零");
if(tempOutString.Length>1)
{
bool zeroStart=tempOutString.Substring(tempOutString.Length-2,2).StartsWith("零");
if(!zeroEnd&&(zeroStart||!tempEnd))
tempOutString+=oneNumberChar;
}
else
{
if(!zeroEnd&&!tempEnd)
tempOutString+=oneNumberChar;
}
}
}
i+=1;
}

while (tempOutString.EndsWith("零"))
{
tempOutString=tempOutString.Substring(0,tempOutString.Length-1);
}

while(tempOutString.EndsWith("元"))
{
tempOutString=tempOutString+"整";
}

this.outString=tempOutString;


}
#endregion
}
}

酋长 2004-04-16
  • 打赏
  • 举报
回复
Imports System


Namespace Test.Com
_
'<summary>
' 功能:字符串处理函数集
' </summary>
Public Class DealString
'
'ToDo: Error processing original source shown below
'
'
'-----^--- Pre-processor directives not translated
' <summary>
'
'ToDo: Error processing original source shown below
'
'
'--^--- Unexpected pre-processor directive
' 输入字符串
' </summary>
Private inputString As String = Nothing
' <summary>
' 输出字符串
' </summary>
Private outString As String = Nothing
' <summary>
' 提示信息
' </summary>
Private noteMessage As String = Nothing
'
'ToDo: Error processing original source shown below
'
'
'-----^--- Pre-processor directives not translated
'
'ToDo: Error processing original source shown below
'
'
'--^--- Unexpected pre-processor directive
'
'ToDo: Error processing original source shown below
'
'
'-----^--- Pre-processor directives not translated
' <summary>
'
'ToDo: Error processing original source shown below
'
'
'--^--- Unexpected pre-processor directive
' 输入字符串
' </summary>

Public Property InputString() As String
Get
Return inputString
End Get
Set
inputString = value
End Set
End Property ' <summary>
' 输出字符串
' </summary>

Public Property OutString() As String
Get
Return outString
End Get
Set
outString = value
End Set
End Property ' <summary>
' 提示信息
' </summary>

Public Property NoteMessage() As String
Get
Return noteMessage
End Get
Set
noteMessage = value
End Set
End Property
'
'ToDo: Error processing original source shown below
'
'
'-----^--- Pre-processor directives not translated
'
'ToDo: Error processing original source shown below
'
'
'--^--- Unexpected pre-processor directive
'
'ToDo: Error processing original source shown below
'
'
'-----^--- Pre-processor directives not translated
Public Sub New()
End Sub 'New
'
'ToDo: Error processing original source shown below
'
'
'--^--- Unexpected pre-processor directive
'
' TODO: 在此处添加构造函数逻辑
'
'
'ToDo: Error processing original source shown below
'
'
'-----^--- Pre-processor directives not translated
'
'ToDo: Error processing original source shown below
'
'
'--^--- Unexpected pre-processor directive
'
'ToDo: Error processing original source shown below
'
'
'-----^--- Pre-processor directives not translated
Public Sub ConvertToChineseNum()
'
'ToDo: Error processing original source shown below
'
'
'--^--- Unexpected pre-processor directive
Dim numList As String = "零壹贰叁肆伍陆柒捌玖"
Dim rmbList As String = "分角元拾佰仟万拾佰仟亿拾佰仟万"
Dim number As Double = 0
Dim tempOutString As String = Nothing

Try
number = Double.Parse(Me.inputString)
Catch
End Try

If number > 9999999999999.99 Then
Me.noteMessage = "超出范围的人民币值"
End If
'将小数转化为整数字符串
Dim tempNumberString As String = Convert.ToInt64((number * 100)).ToString()
Dim tempNmberLength As Integer = tempNumberString.Length
Dim i As Integer = 0
While i < tempNmberLength
Dim oneNumber As Integer = Int32.Parse(tempNumberString.Substring(i, 1))
Dim oneNumberChar As String = numList.Substring(oneNumber, 1)
Dim oneNumberUnit As String = rmbList.Substring(tempNmberLength - i - 1, 1)
If oneNumberChar <> "零" Then
tempOutString += oneNumberChar + oneNumberUnit
Else
If oneNumberUnit = "亿" Or oneNumberUnit = "万" Or oneNumberUnit = "元" Or oneNumberUnit = "零" Then
While tempOutString.EndsWith("零")
tempOutString = tempOutString.Substring(0, tempOutString.Length - 1)
End While
End If
If oneNumberUnit = "亿" Or(oneNumberUnit = "万" And Not tempOutString.EndsWith("亿")) Or oneNumberUnit = "元" Then
tempOutString += oneNumberUnit
Else
Dim tempEnd As Boolean = tempOutString.EndsWith("亿")
Dim zeroEnd As Boolean = tempOutString.EndsWith("零")
If tempOutString.Length > 1 Then
Dim zeroStart As Boolean = tempOutString.Substring(tempOutString.Length - 2, 2).StartsWith("零")
If Not zeroEnd And(zeroStart Or Not tempEnd) Then
tempOutString += oneNumberChar
End If
Else
If Not zeroEnd And Not tempEnd Then
tempOutString += oneNumberChar
End If
End If
End If
End If
i += 1
End While

While tempOutString.EndsWith("零")
tempOutString = tempOutString.Substring(0, tempOutString.Length - 1)
End While

While tempOutString.EndsWith("元")
tempOutString = tempOutString + "整"
End While

Me.outString = tempOutString
End Sub 'ConvertToChineseNum
End Class 'DealString
End Namespace 'Test.Com
'
'ToDo: Error processing original source shown below
'
'
'-----^--- Pre-processor directives not translated
'
'ToDo: Error processing original source shown below
'
'
'--^--- Unexpected pre-processor directive
wggwan 2004-04-14
  • 打赏
  • 举报
回复
or
http://expert.csdn.net/expert/faq/faq_index.asp?id=90995
wggwan 2004-04-14
  • 打赏
  • 举报
回复
or
http://www.csdn.net/develop/article/16/16971.shtm
酋长 2004-04-14
  • 打赏
  • 举报
回复
没有做过不知道有没有这方面的函数或方法,如果又最好,如果没有,下面是我自己想的,可能不完全或严谨。
1。创建2一个函数,输入的都是数字的字符串形式,返回的也是字符串形式。其中一个输入数字返回数字的大写表示,比如6--》陆;另一个输入数字的单位:个(1)十(2)百(3)。。。,返回就是大写的表示。
2。对数字进行处理,比如100023.3400
3。对数字前后去0
4。取数字的length
5。判断小数点的位置从0倒length-1,如果没有,那么这是一个整数。比如例子中,去0后,length=9,小数点在7,那么6位整数,2位小数。
6。判断在第一位的数字(倒序)根据我1中所说的方法实现。但是在实现的时候要注意,如果第二或中间的某个数字为0那么要接着判断他下一位的数字是否为0,如果是继续直到到达小数点的位置(或长度结束)。

7。个人观点,仅供参考。
wggwan 2004-04-14
  • 打赏
  • 举报
回复
转载:
Function CaseMoney
PARA Money
*辨别是否是数字金额
IF TYPE("Money") #"N"
=messagebox(" 金额类型出错",0,_screen.caption)
Return " "
EndIF
*转换金额为字符型
IF Money>9999999999999.99
=messagebox(" 数值太大,无法处理",0,_screen.caption)
Return " "
EndIF
CMoney=Allt(Str(Money,16,2))

*定义数组
DIME CaseFormat(10)
CaseFormat(1) ="壹"
CaseFormat(2) ="贰"
CaseFormat(3) ="叁"
CaseFormat(4) ="肆"
CaseFormat(5) ="伍"
CaseFormat(6) ="陆"
CaseFormat(7) ="柒"
CaseFormat(8) ="捌"
CaseFormat(9) ="玖"
Dime Unit(3)
Unit(1) ="拾"
Unit(2) ="百"
Unit(3) ="千"
*开始转换
M_Cmoney=""
MoneyLen=len(CMoney)
J=0
For i=MoneyLen To 1 step -1
Nowmoney=val(substr(CMoney,i,1))
IF Nowmoney>0
do case
Case i = MoneyLen
M_Cmoney=CaseFormat(Nowmoney)+"分"
Case i = MoneyLen-1
M_Cmoney="元"+CaseFormat(Nowmoney)+"角"+M_Cmoney
Case i = MoneyLen-3
M_Cmoney=CaseFormat(Nowmoney)+M_Cmoney
Case i < MoneyLen-3
IF mod((J+1),4)>0
M_Cmoney=CaseFormat(Nowmoney)+Unit(mod(J+1,4))+M_Cmoney
Else
M_J = int((j+1)/4)-1
IF M_J>0
IF M_J = 1 or M_J = 3
M_C = "万"+m_C
Else
M_C = "亿"+m_C
Endif
EndIF
IF left(M_Cmoney,2)="万"
M_Cmoney=right(M_Cmoney,len(M_Cmoney)-2)
EndIF
M_Cmoney=CaseFormat(Nowmoney)+M_C+M_Cmoney
EndIF
EndCase
Else
do case
Case i = MoneyLen-1
IF Empty(M_Cmoney)
M_Cmoney="元整"
Else
M_Cmoney="元零"+M_Cmoney
EndIF
Case i < MoneyLen-3
IF mod((J+1),4)>0
IF substr(M_Cmoney,1,2)#"零" and !substr(M_Cmoney,1,2)$"万亿元"
M_Cmoney="零" +M_Cmoney
EndIF
Else
M_J = int((j+1)/4)-1
IF M_J>0
IF M_J = 1 or M_J = 3
M_C = "万"+m_C
Else
M_C = "亿"+m_C
Endif
EndIF
IF substr(M_Cmoney,1,2)="万"
M_Cmoney=right(M_Cmoney,len(M_Cmoney)-2)
EndIF
M_Cmoney=M_C+M_Cmoney
EndIF
EndCase
EndIf
j=j+1
EndFor
Return M_Cmoney
panwy 2004-04-14
  • 打赏
  • 举报
回复
学习中..
nnh 2004-04-14
  • 打赏
  • 举报
回复
沒有人知道嗎?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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