浤济类

编程入门 行业动态 更新时间:2024-10-09 03:31:43

浤济类

浤济类

考虑后还是发布类文件内容比较灵活大家使用,可自行修改,因为有的编程不支持中文命名,以及如果有其他制式需要转换时作某些修改缘故,这次采用多字符单词支持写法以适用非单字符单位名称,全新算法;可自行生成DLL,允许任意使用和传播。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;namespace 人体节律/*使用时修改为对应工程名称*/
{class 浤济类{string 中文整数模板 = "仟|佰|拾|☆不可说☆|仟|佰|拾|☆无量|仟|佰|拾|不可思议|仟|佰|拾|那由他|仟|佰|拾|阿僧祇|仟|佰|拾|恒河沙|仟|佰|拾|极|仟|佰|拾|载|仟|佰|拾|正|仟|佰|拾|涧|仟|佰|拾|沟|仟|佰|拾|穰|仟|佰|拾|秭|仟|佰|拾|垓|仟|佰|拾|京|仟|佰|拾|兆|仟|佰|拾|亿|仟|佰|拾|万|仟|佰|拾|元",中文小数模板 = "角|分|厘|毫|丝|忽|微|纤|沙|尘|埃|渺|莫|模糊|逡巡|须臾|瞬息|弹指|刹那|六德|空虚|☆清静",数字模 = "0|1|2|3|4|5|6|7|8|9|.", 中文模 = "零|壹|贰|叁|肆|伍|陆|柒|捌|玖";/// <summary>///摘要说明:(逐字式)获取指定内容的等效字符集合。/// </summary>public string 内容等效(string 转换内容, string 指定内容){string 等效 = "";try{for (int 字符 = 0, 长度 = 转换内容.Length; 字符 < 长度; 字符++){int 位置 = 指定内容.IndexOf(转换内容.Substring(字符, 1));if (位置 >= 0) 等效 += 指定内容.Substring(位置, 1);//等效if (转换内容.Contains("..")) 转换内容 = 转换内容.Replace("..", ".");}}catch (Exception Ts){ 等效 = "浤济类.内容等效:非法->" + Ts.ToString(); }return 等效;}/// <summary>///摘要说明:(逐字式)获取或替换[对应内容]等效的字符集合;[等效对应]必须与[对应内容]顺序保持一致,且每词间必须以"|"标记。///[等效控制]真:把对应位置字符等效,假:获得对应字符等效(过滤)/// </summary>public string 对应等效(string 等效内容, string 对应内容, string 等效对应, bool 等效控制){string[] 板 = 对应内容.Split('|'), 模 = 等效对应.Split('|'); string 替换内容 = "";try{for (int 对应 = 0, 数 = 模.Length; 对应 < 数; 对应++){if (等效控制) if (等效内容.Contains(模[对应])) 等效内容 = 等效内容.Replace(模[对应], 板[对应]);//对应等效if (!等效控制) if (等效内容.Contains(模[对应])) 替换内容 += 板[对应];//替换等效}if (!等效控制) 等效内容 = 替换内容;}catch (Exception Ts){ 等效内容 = "浤济类.对应等效:非法->" + Ts.ToString(); }return 等效内容;}/// <summary>///摘要说明:获取[对应内容]等效的字符集合;[等效对应]必须与[对应内容]顺序保持一致。/// </summary>public ArrayList 单词等效(string[] 等效对应, string[] 对应内容){ArrayList 单词 = new ArrayList();try{foreach (string 元素 in 对应内容){foreach (string 词 in 等效对应){ if (元素.Contains(词)) 单词.Add(词); }}}catch (Exception Ts){ 单词.Add("浤济类.单词等效:非法->" + Ts.ToString()); }return 单词;}/// <summary>///摘要说明:(数值长度=1)按[金额模板]的进制转换为初步金额模,[金额模板]中每金额单位间必须以"|"标记。/// </summary>public string 中文金额整数模(string 金额内容, string 金额模板){string 转换 = ""; int 填 = 金额内容.Length; 金额模板 = "|" + 金额模板;try{if (填 <= 76)for (int 倒读 = 金额模板.Length - 1; 倒读 >= 0; 倒读--){string 字符 = 金额模板.Substring(倒读, 1);if (字符 != "|") 转换 = 转换.Insert(0, 字符);else { 填--; 转换 = 转换.Insert(0, 金额内容.Substring(填, 1)); }if (填 == 0) break;}if (填 > 76) 转换 = "浤济类.中文金额整数模:非法数字超过长度";}catch (Exception Ts){ 转换 = "浤济类.中文金额整数模:非法->" + Ts.ToString(); }return 转换;}/// <summary>///摘要说明:消除“零”的金额单位,成为金额缩写,[金额标识]中每单位间必须以"|"标记,[金额标识]任何语言必须按零-玖顺序书写。/// </summary>public string 金额缩写整数模(string 金额内容, string 金额模板, string 金额标识){string 零 = 金额标识.Split('|')[0];string[] 模 = 金额模板.Split('|').GroupBy(分组 => 分组).Where(筛选 => 筛选.Count() == 1 && 筛选.Key != "").Select(投影 => 投影.Key).ToArray();string[] 板 = 金额模板.Split('|').GroupBy(分组 => 分组).Where(筛选 => 筛选.Count() > 1).Select(投影 => 投影.Key).ToArray();try{for (int 消除 = 0; 消除 < 金额内容.Length; 消除++){foreach (string 元素 in 板){ if (金额内容.Contains(零 + 元素)) 金额内容 = 金额内容.Replace(零 + 元素, 零); }}for (int 消除 = 0; 消除 < 金额内容.Length; 消除++){ if (金额内容.Contains(零 + 零)) 金额内容 = 金额内容.Replace(零 + 零, 零); }for (int 倒读 = 模.Length - 1; 倒读 > 0; 倒读--){if (金额内容.Contains(零 + 模[倒读])) 金额内容 = 金额内容.Replace(零 + 模[倒读], 模[倒读]);if (金额内容.Contains(模[倒读 - 1] + 模[倒读])) 金额内容 = 金额内容.Replace(模[倒读 - 1] + 模[倒读], 模[倒读 - 1]);}}catch (Exception Ts){ 金额内容 = "浤济类.金额缩写整数模:非法->" + Ts.ToString(); }finally { if (金额内容.Length > 0 && 金额内容.IndexOf(模[模.Length - 1]) < 0)金额内容 = 金额内容 + 模[模.Length - 1]; }return 金额内容;}/// <summary>///摘要说明:消除“零”的金额单位,成为金额缩写,[金额标识]中每单位间必须以"|"标记,[金额标识]任何语言必须按零-玖顺序书写。/// </summary>public string 金额缩写小数模(string 金额内容, string 金额模板, string 金额标识){string 零 = 金额标识.Split('|')[0]; string[] 模 = 金额模板.Split('|');try{for (int 顺读 = 0, 数 = 模.Length; 顺读 < 数 - 1; 顺读++){金额内容 = 金额内容.Replace(零 + 模[顺读] + 零 + 模[顺读 + 1], 零);金额内容 = 金额内容.Replace(零 + 模[顺读], 零);}for (int 重复 = 0, 量 = 金额内容.Length; 重复 < 量; 重复++){ 金额内容 = 金额内容.Replace(零 + 零, 零); }if (金额内容 !="" && 金额内容.Substring(金额内容.Length - 零.Length).Contains(零)) 金额内容 = 金额内容.Substring(0, 金额内容.Length - 零.Length);}catch (Exception Ts){ 金额内容 = "浤济类.金额缩写小数模:非法->" + Ts.ToString(); }finally { /*不管是否发生错误总要执行的语句*/ }return 金额内容;}/// <summary>///摘要说明:按[金额模板]的进制转换为初步金额模,[金额模板]中每金额单位间必须以"|"标记,[转换金额模]最终转换金额语言,不包括阿拉伯语。/// </summary>public string 金额整数模(string 金额内容, string 金额模板, string 数字模, string 转换金额模){string 转换 = "", 数字映像 = ""; int 填 = 金额内容.Length; string[] 模 = 金额模板.Split('|');try{if (!数字模.Contains(金额内容.Substring(0, 1))){ if (转换金额模.Contains(金额内容.Substring(0, 1))) 数字映像 = 对应等效(金额内容, 数字模, 转换金额模, true); }else 数字映像 = 金额内容;for (int 倒读 = 模.Length - 1; 倒读 >= 0; 倒读--){转换 = 转换.Insert(0, 模[倒读]);填--; 转换 = 转换.Insert(0, 数字映像.Substring(填, 1));if (填 == 0) break;}转换 = 对应等效(转换, 转换金额模, 数字模, true);}catch (Exception Ts){ 转换 = "浤济类.金额整数模:非法->" + Ts.ToString(); }return 转换;}/// <summary>///摘要说明:按[金额模板]的进制转换为初步金额模,[金额模板]中每金额单位间必须以"|"标记,[转换金额模]最终转换金额语言,不包括阿拉伯语。/// </summary>public string 金额小数模(string 金额内容, string 金额模板, string 数字模, string 转换金额模){string 转换 = "", 数字映像 = ""; string[] 模 = 金额模板.Split('|');try{if (!数字模.Contains(金额内容.Substring(0, 1))){ if (转换金额模.Contains(金额内容.Substring(0, 1))) 数字映像 = 对应等效(金额内容, 数字模, 转换金额模, true); }else 数字映像 = 金额内容;for (int 顺读 = 0, 数 = 模.Length; 顺读 < 数; 顺读++){转换 = 转换.Insert(转换.Length, 数字映像.Substring(顺读, 1));转换 = 转换.Insert(转换.Length, 模[顺读]);if (顺读 == 金额内容.Length - 1) break;}转换 = 对应等效(转换, 转换金额模, 数字模, true);}catch (Exception Ts){ 转换 = "浤济类.金额小数模:非法->" + Ts.ToString(); }return 转换;}/// <summary>///摘要说明:按[金额模板]的进制转换为初步金额模,[金额模板]中每金额单位间必须以"|"标记,[转换金额模]最终转换金额语言,不包括阿拉伯语。/// </summary>public string 金额整数还原模(string 金额内容, string 金额模板, string 数字模, string 转换金额模){string 转换 = "", 数字映像 = "", 零 = 转换金额模.Split('|')[0]; string[] 模 = 金额模板.Split('|'), 单位映像 = null;int 位 = 模.Length - 1; ArrayList 单位 = new ArrayList(); string[] 不重复 = 金额模板.Split('|').Distinct().ToArray();try{if (!金额内容.Contains(模[模.Length - 1])) 金额内容 = 金额内容 + 模[模.Length - 1];if (金额内容.Contains(零)) 金额内容 = 金额内容.Replace(零, "");数字映像 = 对应等效(金额内容, 数字模, 转换金额模, true);单位映像 = 数字映像.Split(new char[9] { '1', '2', '3', '4', '5', '6', '7', '8', '9' });单位 = 单词等效(不重复, 单位映像); int 元素数 = 单位.Count - 1;for (int 倒读映 = 元素数; 倒读映 >= 0; 倒读映--){for (int 倒读 = 位; 倒读 >= 0; 倒读--){if (模[倒读] == 单位[倒读映].ToString()){int 位置 = 数字映像.LastIndexOf(模[倒读]);if (数字模.Contains(数字映像.Substring(数字映像.IndexOf(模[倒读]) - 1, 1))){转换 = 转换.Insert(0, 数字映像.Substring(位置 - 1, 1) + 模[倒读]);数字映像 = 数字映像.Substring(0, 位置);}else{转换 = 转换.Insert(0, 零 + 模[倒读]);数字映像 = 数字映像.Substring(0, 位置);}位 = 位 - 1;break;}if (模[倒读] != 单位[倒读映].ToString()){转换 = 转换.Insert(0, 零 + 模[倒读]);位 = 位 - 1;}}}for (int 倒读 = 模.Length - 1; 倒读 >= 0; 倒读--){ 转换 = 转换.Replace(模[倒读], ""); }转换 = 对应等效(转换, 数字模, 转换金额模, true);}catch (Exception Ts){ 转换 = "浤济类.金额整数补位模:非法->" + Ts.ToString(); }return 转换;}/// <summary>///摘要说明:按[金额模板]的进制转换为初步金额模,[金额模板]中每金额单位间必须以"|"标记,[转换金额模]最终转换金额语言,不包括阿拉伯语。/// </summary>public string 金额小数还原模(string 金额内容, string 金额模板, string 数字模, string 转换金额模){string 转换 = "", 数字映像 = "", 零 = 转换金额模.Split('|')[0]; string[] 模 = 金额模板.Split('|'), 单位映像 = null;try{if (金额内容.Contains(零)) 金额内容 = 金额内容.Replace(零, "");数字映像 = 对应等效(金额内容, 数字模, 转换金额模, true);单位映像 = 数字映像.Split(new char[9] { '1', '2', '3', '4', '5', '6', '7', '8', '9' });for (int 顺读 = 0, 数 = 模.Length; 顺读 < 数; 顺读++){if (!数字映像.Contains(模[顺读]))转换 = 转换.Insert(转换.Length, 零 + 模[顺读]);else转换 = 转换.Insert(转换.Length, 数字映像.Substring(数字映像.IndexOf(模[顺读]) - 1, 1) + 模[顺读]);if (单位映像[单位映像.Length - 1] == 模[顺读]) break;}foreach (string 元素 in 模) { 转换 = 转换.Replace(元素, ""); }转换 = 对应等效(转换, 数字模, 转换金额模, true);}catch (Exception Ts){ 转换 = "浤济类.金额小数补位模:非法->" + Ts.ToString(); }return 转换;}/// <summary>///摘要说明:只对数字执行。/// </summary>public string 舍入精度选择(string 数字金额, string 精度, string 舍入){string 舍入数输出 = "", 不舍位 = ""; Double 浮点数 = 0.0; int 精度数 = 22;try{if(!精度.Contains("无限精度")) 精度数 = int.Parse(内容等效(精度, "0123456789"));if (精度数 > 10 && 数字金额.Length > 10){不舍位 = 数字金额.Substring(0, 8);舍入数输出 = 数字金额.Substring(8);精度数 = 精度数 - 8;}else 舍入数输出 = 数字金额;浮点数 = Convert.ToDouble(舍入数输出.Insert(0, "0."));if (舍入 == "五入")舍入数输出 = Math.Round((decimal)浮点数, 精度数, MidpointRounding.AwayFromZero).ToString();if (舍入 == "六入")舍入数输出 = Math.Round((decimal)浮点数, 精度数, MidpointRounding.ToEven).ToString();舍入数输出 = 舍入数输出.Replace("0.", "");if (不舍位.Length > 0) 舍入数输出 = 不舍位 + 舍入数输出;}catch (Exception Ts){ 舍入数输出 = "浤济类.舍入精度选择:非法->" + Ts.ToString(); }return 舍入数输出;}/// <summary>///摘要说明:波若波罗密多为内部总体转换输出,一步到位,使用内置中文金额模板。/// </summary>public string 波若波罗密多(string 输入待转金额, string 精度, string 舍入, string 选择){string 总输出 = "", 中文待转金额 = "";if (选择.Contains("数→中")){string[] 金额整理 = 内容等效(输入待转金额, 数字模.Replace("|", "")).Split('.');if (金额整理[0] != "") 总输出 = 金额缩写整数模(金额整数模(金额整理[0], 中文整数模板, 数字模, 中文模), 中文整数模板, 中文模);if (金额整理.Length > 1 && 金额整理[1] != "") 总输出 += 金额缩写小数模(金额小数模(舍入精度选择(金额整理[1], 精度, 舍入), 中文小数模板, 数字模, 中文模), 中文小数模板, 中文模);}if (选择.Contains("中→数")){string[] 金额整理 = new string[2], 元素 = 中文整数模板.Split('|').Distinct().ToArray();中文待转金额 = 内容等效(输入待转金额, 中文模.Replace("|", "") + 中文整数模板.Replace("|", "") + 中文小数模板.Replace("|", ""));if (中文待转金额 != ""){金额整理[0] = 中文待转金额.Substring(0, 中文待转金额.IndexOf(元素[元素.Length - 1])) + 元素[元素.Length - 1];金额整理[1] = 中文待转金额.Substring(中文待转金额.IndexOf(元素[元素.Length - 1])).Replace(元素[元素.Length - 1], "");}if (金额整理[0] != "") 总输出 = 金额整数还原模(金额整理[0], 中文整数模板, 数字模, 中文模);if (金额整理[1] != "") 总输出 += "." + 金额小数还原模(金额整理[1], 中文小数模板, 数字模, 中文模);}return 总输出;}}
}

调用:同步委托拉姆达表达式部分为分别组合输出,最底部为一步到位转换输出,只有2行代码,够简单了。

         private void 转换金额_Click(object sender, EventArgs e){浤济类 转换 = new 浤济类();this.Invoke(new Action(() =>{string 换行 = "\r\n☆☆☆\r\n",中文整数模板 = "仟|佰|拾|☆不可说☆|仟|佰|拾|☆无量|仟|佰|拾|不可思议|仟|佰|拾|那由他|仟|佰|拾|阿僧祇|仟|佰|拾|恒河沙|仟|佰|拾|极|仟|佰|拾|载|仟|佰|拾|正|仟|佰|拾|涧|仟|佰|拾|沟|仟|佰|拾|穰|仟|佰|拾|秭|仟|佰|拾|垓|仟|佰|拾|京|仟|佰|拾|兆|仟|佰|拾|亿|仟|佰|拾|万|仟|佰|拾|元",中文小数模板 = "角|分|厘|毫|丝|忽|微|纤|沙|尘|埃|渺|莫|模糊|逡巡|须臾|瞬息|弹指|刹那|六德|空虚|☆清静",数字模 = "0|1|2|3|4|5|6|7|8|9|.", 中文模 = "零|壹|贰|叁|肆|伍|陆|柒|捌|玖", 待转金额 = "", 数字待转金额 = "", 整数 = "", 小数 = "", 缩写整数 = "", 缩写小数 = "";if (金额输入.Text != "") {数字待转金额 = 转换.内容等效(金额输入.Text, 数字模.Replace("|", ""));待转金额 = 转换.内容等效(金额输入.Text, 中文模.Replace("|", "") + 中文整数模板.Replace("|", "") + 中文小数模板.Replace("|", ""));}if (数转.Checked){string[] 金额整理 = 数字待转金额.Split('.');if (金额整理[0] != "") 整数 = 转换.金额整数模(金额整理[0], 中文整数模板, 数字模, 中文模);if (金额整理.Length > 1 && 金额整理[1] != "") 小数 = 转换.金额小数模(转换.舍入精度选择(金额整理[1], 精度.Text, 舍入.Text), 中文小数模板, 数字模, 中文模);缩写整数 = 转换.金额缩写整数模(整数, 中文整数模板, 中文模); 缩写小数 = 转换.金额缩写小数模(小数, 中文小数模板, 中文模);}if (转数.Checked){string[] 元素 = 中文整数模板.Split('|').Distinct().ToArray(), 金额整理 = new string[2];//采集单位(多字符方式)if (待转金额.Length > 0){金额整理[0] = 待转金额.Substring(0, 待转金额.IndexOf(元素[元素.Length - 1])) + 元素[元素.Length - 1];金额整理[1] = 待转金额.Substring(待转金额.IndexOf(元素[元素.Length - 1])).Replace(元素[元素.Length - 1], "");if (金额整理[0] != "") 整数 = 转换.金额整数还原模(金额整理[0], 中文整数模板, 数字模, 中文模);if (金额整理.Length > 1 && 金额整理[1] != "") 小数 = 转换.金额小数还原模(金额整理[1], 中文小数模板, 数字模, 中文模);}}if (数转.Checked) 金额输出.Text = 缩写整数 + 缩写小数 + 换行;if (转数.Checked) 金额输出.Text = 整数 + "." + 小数 + 换行;金额输出.Text += 整数 + 换行 + 缩写整数 + 换行 + 小数 + 换行 + 缩写小数 + 换行;}));-------------------------------------if (数转.Checked) 金额输出.Text = 转换.波若波罗密多(金额输入.Text, 精度.Text, 舍入.Text, 数转.Text);if (转数.Checked) 金额输出.Text = 转换.波若波罗密多(金额输入.Text, 精度.Text, 舍入.Text, 转数.Text);}private void 舍入_SelectedIndexChanged(object sender, EventArgs e){ 转换金额_Click(null, null); }private void 精度_SelectedIndexChanged(object sender, EventArgs e){ 转换金额_Click(null, null); }

特别需要注明:精度控件必须这样写(01位精度---21位精度)01-21纯数字。

若发现任何错误请指正或联系以便修改。

2014-3-31

            var 值 = Console.ReadLine();string 中文整数模板 = "仟|佰|拾|☆不可说☆|仟|佰|拾|☆无量|仟|佰|拾|不可思议|仟|佰|拾|那由他|仟|佰|拾|阿僧祇|仟|佰|拾|恒河沙|仟|佰|拾|极|仟|佰|拾|载|仟|佰|拾|正|仟|佰|拾|涧|仟|佰|拾|沟|仟|佰|拾|穰|仟|佰|拾|秭|仟|佰|拾|垓|仟|佰|拾|京|仟|佰|拾|兆|仟|佰|拾|亿|仟|佰|拾|万|仟|佰|拾|元",中文小数模板 = "角|分|厘|毫|丝|忽|微|纤|沙|尘|埃|渺|莫|模糊|逡巡|须臾|瞬息|弹指|刹那|六德|空虚|☆清静", 中文模 = "零|壹|贰|叁|肆|伍|陆|柒|捌|玖";int 序 = 0; var 值组 = 值.Split('.'); var 中文整数 = "";foreach (var 整数 in 值组[0].Reverse()){中文整数 = 中文整数.Insert(0, 中文模.Split('|')[int.Parse(整数.ToString())].ToString() +中文整数模板.Split('|').Reverse().ToArray()[序].ToString());序++;}序 = 0;foreach (var 小数 in 值组[1]){中文整数 = 中文整数.Insert(中文整数.Length, 中文模.Split('|')[int.Parse(小数.ToString())].ToString() +中文小数模板.Split('|')[序].ToString());序++;}Console.WriteLine(中文整数);

更多推荐

浤济类

本文发布于:2024-02-16 22:46:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1691718.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:浤济类

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!