- 作者:zhaozj
- 发表时间:2020-12-23 10:39
- 来源:未知
本程序用于将小写数字转换为一般中文大写或中文大写金额, 提供以下功能:1. 允许任意整数或小数, 一般中文大写转换范围在(-10,000,000,000,000,000 ~ 10,000,000,000,000,000)之间, 中文大写金额转换范围在(0,? ~ 10,000,000,000,000,000)之间. 能转换所有系统接纳的输入数字, 如"0", "0.", ".0", "-.0", ".0-", "+114", "20.+"等.2. 能识别并处理任何错误输入.3. 算法稳定, 速度较快, 中文大写比较符合语言习惯
using System;using System.Text;
namespace DigitToChnText{ /// /// 本程序用于将小写数字转换为 /// 1. 一般中文大写数字 /// 2. 人民币大写数字 /// 算法设计:黄晶 /// 程序制作:黄晶 /// 时间:2004年8月12日 /// class DigitToChnText { private readonly char[] chnGenText; private readonly char[] chnGenDigit;
private readonly char[] chnRMBText; private readonly char[] chnRMBDigit; private readonly char[] chnRMBUnit;
// // 构造函数 // public DigitToChnText() { // 一般大写中文数字组 chnGenText = new char[]{'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'}; chnGenDigit = new char[]{'十', '百', '千', '万', '亿'};
// 人民币专用数字组 chnRMBText = new char[]{'零', '壹', '贰', '叁', '肆', '伍', '陆', '染', '捌', '玖'}; chnRMBDigit = new char[]{'拾', '佰', '仟', '萬', '億'}; chnRMBUnit = new char[]{'角', '分'}; }
// // 主转换函数 // 参数 // string strDigit - 待转换数字字符串 // bool bToRMB - 是否转换成人民币 // 返回 // string - 转换成的大写字符串 // public string Convert( string strDigit, bool bToRMB ) { // 检查输入数字有效性 CheckDigit(ref strDigit, bToRMB);
// 定义结果字符串 StringBuilder strResult = new StringBuilder();
// 提取符号部分 ExtractSign( ref strResult, ref strDigit, bToRMB );
// 提取并转换整数和小数部分 ConvertNumber( ref strResult, ref strDigit, bToRMB );
return strResult.ToString(); }
// // 转换数字 // protected void ConvertNumber( ref StringBuilder strResult, ref string strDigit, bool bToRMB ) { int indexOfPoint; if( -1 == ( indexOfPoint = strDigit.IndexOf('.') ) ) // 如果没有小数部分 { strResult.Append( ConvertIntegral( strDigit, bToRMB ) );