# 一个数字转换为中文的函数

<%
'格式化中文金额的方法
'@ prmtType 为"A" 时表示返回带零的全字串，否则返回中文习惯的金额
'调用方法：FormatChineseMoney(30503.34,"")
response.write FormatChineseMoney(30503.34,"")
Function FormatChineseMoney(prmtMoney,prmtType)
dim strMoney,strMoneyLeft,strMoneyRight
if IsNumeric(prmtMoney) then
strMoney=FormatCurrency(prmtMoney,2,-1,0,0)
dim regMoney
Set regMoney = New RegExp   ' 创建正则表达式。
regMoney.Pattern = "^[￥|/$]?[+|-]?(/d+)?(?:/.(/d{1,2}))?$"   ' 设置模式。
regMoney.IgnoreCase = True   ' 设置是否区分大小写。
regMoney.Global = True   ' 设置全程匹配。
if regMoney.test(strMoney) then
Set oMatches = regMoney.Execute(strMoney)
Set oMatch = oMatches(0)
strMoneyLeft=oMatch.SubMatches(0)
strMoneyRight=oMatch.SubMatches(1)
FormatChineseMoney=ReplaceMoneyLeft(oMatch.SubMatches(0),prmtType)&ReplaceMoneyRight(oMatch.SubMatches(1),prmtType)&"整"
else
FormatChineseMoney="所传金钱金额不合规则！"
end if
else
FormatChineseMoney="所传金钱金额不是数字！"
end if
end Function

Function ReplaceMoneyLeft(prmtMoney,prmtType)
dim intLenMoney,aryK,aryW,aryN,intModI,sNum,sNumA,i
intLenMoney=Len(prmtMoney)
aryK=Array("","拾","佰","仟")
aryW=Array("","元","万","亿")
aryN=Array("零","壹","贰","叄","肆","伍","陆","柒","捌","玖")
for i=1 to intLenMoney
sNum=aryN(Mid(prmtMoney,intLenMoney-i+1,1))&aryK((i-1) Mod 4)&aryW(GetWYIndex(i))&sNum
sNumA="<span class=""spanCNMoneyMoney""> "&aryN(Mid(prmtMoney,intLenMoney-i+1,1))&" </span>"&"<span class=""spanCNMoneyUnit""> "&aryK((i-1) Mod 4)&aryW(GetWYIndex(i))&" </span>"&sNumA
next
if prmtType="A" then
ReplaceMoneyLeft=sNumA
else
ReplaceMoneyLeft=ReplaceCNZeroLeft(sNum)
end if
End Function

Function ReplaceMoneyRight(prmtMoney,prmtType)
dim intLenMoney,aryF,aryN,intModI,sNum,sNumA,i
intLenMoney=Len(prmtMoney)
aryF=Array("","角","分")
aryN=Array("零","壹","贰","叄","肆","伍","陆","柒","捌","玖")
for i=intLenMoney to 1 step -1
sNum=aryN(Mid(prmtMoney,i,1))&aryF(i)&sNum
'response.Write(i&prmtMoney&Mid(prmtMoney,i,1)&aryN(Mid(prmtMoney,i,1)))
sNumA="<span class=""spanCNMoneyMoney""> "&aryN(Mid(prmtMoney,i,1))&" </span>"&"<span class=""spanCNMoneyUnit""> "&aryF(i)&" </span>"&sNumA
next
if prmtType="A" then
ReplaceMoneyRight=sNumA
else
ReplaceMoneyRight=ReplaceCNZeroRight(sNum)
end if
End Function

Function GetWYIndex(prmtIndex)
if prmtIndex=1 then
GetWYIndex=1
elseif ((prmtIndex-5) mod 8)=0 then
GetWYIndex=2
elseif  ((prmtIndex-1) mod 8)=0 then
GetWYIndex=3
else
GetWYIndex=0
end if
End Function

Function ReplaceCNZeroLeft(prmtStrCNMoney)
ReplaceCNZeroLeft=prmtStrCNMoney
ReplaceCNZeroLeft=replace(ReplaceCNZeroLeft,"零仟","零")
ReplaceCNZeroLeft=replace(ReplaceCNZeroLeft,"零佰","零")
ReplaceCNZeroLeft=replace(ReplaceCNZeroLeft,"零拾","零")
dim regExZero
Set regExZero = New RegExp   ' 创建正则表达式。
regExZero.IgnoreCase = True   ' 设置是否区分大小写。
regExZero.Global = True   ' 设置全程匹配。
regExZero.Pattern = "零+"
ReplaceCNZeroLeft=regExZero.replace(ReplaceCNZeroLeft,"零")
ReplaceCNZeroLeft=replace(ReplaceCNZeroLeft,"零万","万")
ReplaceCNZeroLeft=replace(ReplaceCNZeroLeft,"零亿","亿")
ReplaceCNZeroLeft=replace(ReplaceCNZeroLeft,"零元","元")
ReplaceCNZeroLeft=replace(ReplaceCNZeroLeft,"亿万","亿零")
End Function

Function ReplaceCNZeroRight(prmtStrCNMoney)
ReplaceCNZeroRight=prmtStrCNMoney
ReplaceCNZeroRight=replace(ReplaceCNZeroRight,"零角","零")
dim regExZero
Set regExZero = New RegExp   ' 创建正则表达式。
regExZero.IgnoreCase = True   ' 设置是否区分大小写。
regExZero.Global = True   ' 设置全程匹配。
regExZero.Pattern = "零+分"
ReplaceCNZeroRight=regExZero.replace(ReplaceCNZeroRight,"")
End Function

%>

• 本文已收录于以下专栏：

## vba中中文数字和阿拉伯数字转换，也说下sub求面积的问题

vba中，如何将数字1转换成中文的一？又比如，如何将数字2转换成中文的二？ 答案： 如果只是简单地转换一位数字，下面的公式可以很快搞定(假设数据存放在A1)，如果是多位数字转换，这个公式就不适用；...
• ouxuxuan0620
• 2015年12月24日 18:42
• 698

## 编写函数进行日期转换；键输入的大写的日期转换成阿拉伯数字的形式

• shang_111111
• 2012年09月11日 22:10
• 597

## 将整数n这个数字转换为对应的字符串

• ttyue_123
• 2016年08月09日 21:41
• 769

## SAP阿拉伯数字转中文大写函数

• ioumm2008
• 2014年02月18日 17:20
• 655

## C语言：实现一个函数itoa（int n,char s[]），将整数n这个数字转换为对应的字符串，保存到s中

#include char itoa(int n,char s[]) {      int i = 0;      s[i] = n;      return s[i];  } int main...
• hanjing_1995
• 2016年05月30日 17:14
• 281

## 数字转换为中文大写

• xxssyyyyssxx
• 2016年08月04日 12:57
• 209

## CodeIgniter 数字转换为中文

if ( ! defined(BASEPATH)) exit(No direct script access allowed);/** * CodeIgniter的人民币金额辅助函数 * 其中num2...
• drlan1986
• 2010年01月26日 17:12
• 220

## 数字(int型范围内正整数)和中文的相互转换

• pjz161026
• 2017年02月13日 15:13
• 737

## 钱币数字转换为中文

public string NumToChs(decimal a_money)        ...{            try            ...{                st...
• tigerleq
• 2008年02月28日 13:50
• 456

## 将数字转换为中文

import java.io.BufferedReader;   3.import java.io.IOException;   4.import java.io.InputStreamRea...
• HarderXin
• 2012年02月23日 09:14
• 490

举报原因： 您举报文章：一个数字转换为中文的函数 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)