金钱形式转换为中文大写
第一种:
using System.Text.RegularExpressions; private string DaXie(string money) { string s = double.Parse(money).ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A"); string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}"); return Regex.Replace(d, ".", delegate(Match m) { return "负圆空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万億兆京垓秭穰"[m.Value[0] - '-'].ToString(); }); }
第二种:
private static string[] HanDigiStr = { "零 ", "壹 ", "贰 ", "叁 ", "肆 ", "伍 ", "陆 ", "柒 ", "捌 ", "玖 " }; private static string[] HanDiviStr = { " ", "拾 ", "佰 ", "仟 ", "万 ", "拾 ", "佰 ", "仟 ", "亿 ", "拾 ", "佰 ", "仟 ", "万 ", "拾 ", "佰 ", "仟 ", "亿 ", "拾 ", "佰 ", "仟 ", "万 ", "拾 ", "佰 ", "仟 " }; private static string PositiveIntegerToHanStr(string NumStr) { // 输入字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零 string RMBStr = " "; int len, n; bool hasvalue = false, lastzero = false; // 亿、万进位前有数值标记 len = NumStr.Length; for (int i = 0; i < len; i++) { // if( NumStr[i]== ' ' ) continue; // AnsiString[] base is 1 n = (NumStr[i] - '0'); // if( n <0 || n> 9 ) return "输入含非数字字符! "; int j = len - i - 1; if (n != 0) { if (lastzero) RMBStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零 // 除了亿万前的零不带到后面 // if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) // 如十进位前有零也不发壹音用此行 // if( !( n==1 && (i%4)==1 && i==len-1 ) ) // 十进位处于第一位不发壹音 RMBStr += HanDigiStr[n]; RMBStr += HanDiviStr[len - i - 1]; // 非零值后加进位,个位为空 hasvalue = true; // 置万进位前有值标记 } else { if (j == 8 || j == 4 && hasvalue) // 亿万之间必须有非零值方显示万 RMBStr += HanDiviStr[len - i - 1]; // “亿”或“万” } if (j % 8 == 0) hasvalue = false; // 万进位前有值标记逢亿复位 lastzero = (n == 0) && (j % 4 != 0); // 亿万前有零后不加零,如:拾万贰仟 } if (RMBStr.Length == 0) return HanDigiStr[0]; // 输入空字符或 "0 ",返回 "零 " return RMBStr; } public static string NumToRMBStr(double val) { if (val > 100000000000) return "数字过大! "; //不小于千亿(可以更大点但没有什么意义了) string SignStr = " ", TailStr = " "; double fraction = 0; Int64 integer = 0; if (val < 0) { val = -val; SignStr = "负 "; } integer = Convert.ToInt64(val - val % 1); //整数部分 由于ToInt64本身有四舍五入功能所以要加 val%1 部分 int jiao, fen; fraction = Math.Round(val % 1, 2); // 四舍五入到分 在.Net中四舍五入有点争议,它是伍不进位的。 fen = Convert.ToInt32((fraction * 100) % 10);//分 jiao = Convert.ToInt32((fraction * 100 - fen) / 10);//角 if (jiao == 0 && fen == 0) { TailStr = "整 "; } else { TailStr = HanDigiStr[jiao]; if (jiao != 0) TailStr += "角 "; if (integer == 0 && jiao == 0) // 零元后不写零几分 TailStr = " "; if (fen != 0) TailStr += HanDigiStr[fen] + "分 "; } // 下一行可用于非正规金融场合,0.03只显示“叁分”而不是“零元叁分” // if( integer==0 ) return SignStr+TailStr; return SignStr + PositiveIntegerToHanStr(integer.ToString()) + "元 " + TailStr; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)