数字汉字转换-VB
– ********************************************** – FUNCTION NAME: – CONVERT_MONEY – DESCRIPTION: – 将“阿拉伯数字”转换成“大写汉字” – ********************************************** FUNCTION convert_money(input_nbr IN NUMBER DEFAULT 0) RETURN VARCHAR2 IS -- num_character VARCHAR2(100) := '零壹贰叁肆伍陆柒捌玖'; unit_character VARCHAR2(300) := '分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟亿'; output_string VARCHAR2(500) := ''; remain_nbr NUMBER(20); input_nbr_bak NUMBER(30); -- 用于接收输入参数 INPUT_NBR bit_num NUMBER(20); -- 每一位上的数字 bit_unit VARCHAR2(20); -- 每一位所对的单位 bit_indic NUMBER(3) := 0; -- 每一位的数字是否为0,0表示为0,1表示不为0 i NUMBER(2) := 0; -- 循环次数,索引变量从0开始 spe_unit VARCHAR2(30) := 'A'; -- 特殊位,包括万和亿,表示该亿汉字是否已写入结果字串 sign_indic VARCHAR2(1); -- 用于标志数值符号:0为正,1为负 -- BEGIN -- IF input_nbr = 0 THEN RETURN '零圆整'; ELSIF input_nbr > 0 THEN sign_indic := '0'; input_nbr_bak := input_nbr; ELSIF input_nbr < 0 THEN sign_indic := '1'; input_nbr_bak := -input_nbr; END IF; -- LOOP -- remain_nbr := floor(input_nbr_bak / 10); -- 取出除后的商 bit_num := input_nbr_bak - remain_nbr * 10; -- 取出当前位的数值 input_nbr_bak := remain_nbr; -- 保存商以做下一次循环 bit_unit := rtrim(substr(unit_character, i * 1 + 1, 1)); -- 取出当前位的单位汉字 -- IF bit_num > 0 THEN -- bit_indic := 1; -- IF i = 6 OR i = 14 THEN spe_unit := '万'; ELSIF (i >= 7 AND i <= 9) OR (i >= 15 AND i <= 17) THEN -- IF spe_unit != '万' THEN output_string := '万' || output_string; spe_unit := '万'; END IF; -- END IF; -- output_string := substr(num_character, bit_num * 1 + 1, 1) || bit_unit || output_string; -- ELSE -- IF bit_indic = 1 THEN output_string := '零' || output_string; END IF; -- IF bit_unit IN ('圆', '亿') THEN spe_unit := bit_unit; output_string := bit_unit || output_string; END IF; -- bit_indic := 0; -- END IF; -- i := i + 1; -- EXIT WHEN input_nbr_bak = 0; -- END LOOP; -- -- **************************** -- 输入的数字没有分,最小的是角,则尾部串个整 -- **************************** IF MOD(input_nbr, 10) = 0 THEN output_string := output_string || '整'; END IF; -- IF sign_indic = '1' THEN output_string := '负' || output_string; END IF; -- RETURN output_string; -- END convert_money;
数字转换成中文汉字数字
public class Test2 { private static final String[] UNITS = { "", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千", }; private static final String[] NUMS = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", }; /** * 数字转换成中文汉字 * @param value 要转换的数字 * @return 返回数字转后的汉字字符串 */ public static String number2Chinese(int value) { String result = ""; //转译结果 for (int i = String.valueOf(value).length() - 1; i >= 0; i--) {//String.valueOf(value) 转换成String型得到其长度 并排除个位,因为个位不需要单位 int r = (int) (value / Math.pow(10, i));//value / Math.pow(10, i) 截位匹配单位 result += NUMS[r % 10] + UNITS[i]; } result = result.replaceAll("零[十, 百, 千]", "零");//匹配字符串中的 "零[十, 百, 千]" 替换为 "零" result = result.replaceAll("零+", "零");//匹配字符串中的1或多个 "零" 替换为 "零" result = result.replaceAll("零([万, 亿])", "$1"); result = result.replaceAll("亿万", "亿"); //亿万位拼接时发生的特殊情况 if (result.startsWith("一十")) { //判断是否以 "一十" 开头 如果是截取第一个字符 result = result.substring(1); } if (result.endsWith("零")) { //判断是否以 "零" 结尾 如果是截取除 "零" 外的字符 result = result.substring(0, result.length() - 1); } return result; } public static void main(String[] args) { System.out.println(Test2.number2Chinese(2139567804)); } } private static final String[] UNITS = { "", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千", }; private static final String[] NUMS = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", }; /** * 数字转换成中文汉字 * @param value 要转换的数字 * @return 返回数字转后的汉字字符串 */ public static String number2Chinese(int value) { String result = ""; //转译结果 for (int i = String.valueOf(value).length() - 1; i >= 0; i--) {//String.valueOf(value) 转换成String型得到其长度 并排除个位,因为个位不需要单位 int r = (int) (value / Math.pow(10, i));//value / Math.pow(10, i) 截位匹配单位 result += NUMS[r % 10] + UNITS[i]; } result = result.replaceAll("零[十, 百, 千]", "零");//匹配字符串中的 "零[十, 百, 千]" 替换为 "零" result = result.replaceAll("零+", "零");//匹配字符串中的1或多个 "零" 替换为 "零" result = result.replaceAll("零([万, 亿])", "$1"); result = result.replaceAll("亿万", "亿"); //亿万位拼接时发生的特殊情况 if (result.startsWith("一十")) { //判断是否以 "一十" 开头 如果是截取第一个字符 result = result.substring(1); } if (result.endsWith("零")) { //判断是否以 "零" 结尾 如果是截取除 "零" 外的字符 result = result.substring(0, result.length() - 1); } return result; } public static void main(String[] args) { System.out.println(Test2.number2Chinese(2139567804)); } }
文本中所有汉字数字转阿拉伯数字-VB
Option Explicit Function CNum(ByVal CdataStr As String) As String Dim i As Integer, Idx As Integer, Idc As Integer Dim tmp As String, sTmp As String, cTmp As String, aTmp As String Dim Char, CharUnit, Num Dim rmbFormat As String Dim NumLong As Long Dim NumTmp As Long, NumTmpA As Long, NumTmpB As Long On Error GoTo errexit '别字列表 Char = Array( "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "百", "千") '标准字列表 CharUnit = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾", "佰", "仟", "万", "亿") '中文数位列表 Num = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) rmbFormat = "拾佰仟万拾佰仟亿" '统一大写标准 For i = 0 To UBound(Char) CdataStr = Replace(CdataStr, Char(i), CharUnit(i)) Next '数字转换为阿拉伯数字 For i = 0 To UBound(Num) CdataStr = Replace(CdataStr, CharUnit(i), Num(i)) Next For i = 1 To Len(CdataStr) tmp = Mid(CdataStr, i, 1) If IsNumeric(tmp) Then '数字处理 NumTmp = Val(tmp) If NumTmp = 0 Then '遇0位数处理 Idx = Idx - 1 End If If i = Len(CdataStr) Then ' 数字结束处理 NumLong = NumLong + NumTmpB + NumTmp cTmp = CStr(NumLong) NumLong = 0 NumTmpB = 0 NumTmp = 0 End If Else '汉字处理 Idx = InStr(rmbFormat, tmp) '位数读取 If Idx > 0 Then '大写汉字处理 If Idx <= 3 Then '千位数处理 If NumTmp > 0 Then '拾 佰 千 非空字头 NumTmpB = NumTmpB + NumTmp * 10 ^ Idx NumTmp = 0 Idx = Idx - 1 Else If NumTmpB > 0 Then '拾 百 千 空字头 前有数字前缀 显示汉字 如:6百千=600千 cTmp = CStr(NumTmpB) & tmp Else If Idx = 1 Then '无数字前缀 拾 空字头 只限:拾=10 NumTmp = 1 NumTmpB = NumTmp * 10 ^ Idx NumTmp = 0 Idx = Idx - 1 Else '无数字前缀空字 如:“百”=“百” cTmp = tmp End If End If End If ElseIf Idx = 0 Or Idx = 4 Or Idx = 8 Then ' 万 亿 位数分段计算,保留空位数(IDX=0)计算 If NumTmp > 0 Or NumTmpB > 0 Then '只计算第一次出现,下一次作为后缀(如:10万万只计算第一个“万”,第二个“万”作为后缀处理) NumLong = NumLong + (NumTmpB + NumTmp) * 10 ^ Idx '保留此位数据,垒入之后的数字 NumTmpB = 0 NumTmp = 0 ElseIf NumLong > 0 Then '汉字后缀表示处理,如:10万万只计算第一个“万”,第二个“万”作为后缀处理 cTmp = CStr(NumLong) & tmp NumLong = 0 End If Idc = Idx - 1 ElseIf NumLong = 0 And NumTmp = 0 And NumTmpB > 0 Then '百 拾 后缀处理 cTmp = CStr(NumTmpB) & tmp NumTmpB = 0 Else cTmp = tmp '大于“亿”汉字数字及 非大写数字——字符处理 直接显示 如:100兆=100兆 Idc = 0 End If Else '其它汉字或字符处理 If NumLong > 0 Or NumTmp > 0 Or NumTmpB > 0 Then '计算汉字部分数值 合并 NumLong = NumLong + (NumTmpB + NumTmp) * 10 ^ Idx cTmp = CStr(NumLong) NumLong = 0 NumTmp = 0 NumTmpB = 0 End If cTmp = cTmp & tmp End If If i = Len(CdataStr) And cTmp = "" Then '结束转换处理 如:10千=100000 10万=1000000 结束内部计算 结束计算输出计算结果 If NumLong > 0 Or NumTmpB > 0 Or NumTmp > 0 Then NumLong = NumLong + (NumTmpB + NumTmp) * 10 ^ Idx cTmp = CStr(NumLong) NumTmp = 0 NumLong = 0 NumTmpB = 0 Else '无内部数字计算结果处理 cTmp = tmp End If End If End If If cTmp <> "" Then '转换数据、汉字、字符串接 sTmp = sTmp & cTmp cTmp = "" End If Next i '转换成功,输出数据 CNum = sTmp Exit Function '转换失败,输出空 errexit: CNum = "" End Function Private Sub Form_Load() Debug.Print CNum("拾") Debug.Print CNum("百") Debug.Print CNum("五佰十") Debug.Print CNum("金额:拾亿零叁百05万零捌元六角,拾2万万人口") Debug.Print CNum("陆仟壹佰叁拾捌元五角一分") Debug.Print CNum("一万零叁拾陆") Debug.Print CNum("天天五亿元") Debug.Print CNum("我要拾元") End Sub
结果:
10
佰
500拾
金额:1003050008元6角,120000万人口
6138元5角1分
10036
天天500000000元
我要10元
本文来自博客园,作者:CharyGao,转载请注明原文链接:https://www.cnblogs.com/Chary/articles/12842466.html