string ToChineseMoney(decimal num)
{
if (num > (decimal)Math.Pow(10, 16)) throw new Exception("最大为千万亿"); //再大该怎么念?;)
string[] chineseNumbers = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
string[] units = ["", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "万"];
decimal round2Num = Math.Round(Math.Abs(num), 2, MidpointRounding.AwayFromZero); //四舍五入(非银行家舍入法)
long intPart = (long)Math.Floor(round2Num); //整数部分
int floatPart = (int)((round2Num - intPart) * 100); //小数部分
string chineseMoneyString = string.Join("", [.. intPart
.ToString()
.Reverse()
.Select((n, i) => chineseNumbers[(int)Char.GetNumericValue(n)] + (n == '0' && i % 4 > 0 ? "" : units[i]))
.Reverse()]);
chineseMoneyString = Regex.Replace(chineseMoneyString, "零+", "零");
chineseMoneyString = Regex.Replace(chineseMoneyString, "零$", "");
chineseMoneyString = chineseMoneyString.Replace("零亿", "亿");
chineseMoneyString = chineseMoneyString.Replace("零万", "万");
chineseMoneyString = chineseMoneyString.Replace("亿万", "亿");
// chineseMoneyString = chineseMoneyString.Replace("壹拾", "拾"); //有强迫症的取消注释
chineseMoneyString += "元";
chineseMoneyString += floatPart == 0 ?
"整" :
chineseNumbers[(floatPart / 10)] + (floatPart / 10 > 0 ? "角" : "") + (floatPart % 10 == 0 ? "" : chineseNumbers[floatPart % 10] + "分");
return (num < 0 ? "负" : "") + chineseMoneyString;
}
//测试
//一些特殊读法的数
List<decimal> nums = [1, 10, 100, 1000, 10000, -100000, 10000000, 100000000, 1000000000000, 10000000000000, 100001, 1000000100001, 101010010100];
//再随机100个
var ran = new Random();
(new int[100]).ToList().ForEach(_ => nums.Add(ran.NextInt64() / 1000m));
nums.ForEach(n =>
{
Console.Write(n.ToString());
Console.Write(" : ");
Console.WriteLine(ToChineseMoney(n));
});
1 : 壹元整
10 : 壹拾元整
100 : 壹佰元整
1000 : 壹仟元整
10000 : 壹万元整
-100000 : 负壹拾万元整
10000000 : 壹仟万元整
100000000 : 壹亿元整
1000000000000 : 壹万亿元整
10000000000000 : 壹拾万亿元整
100001 : 壹拾万零壹元整
1000000100001 : 壹万亿零壹拾万零壹元整
101010010100 : 壹仟零壹拾亿壹仟零壹万零壹佰元整
6976546923006683.71 : 陆仟玖佰柒拾陆万伍仟肆佰陆拾玖亿贰仟叁佰万陆仟陆佰捌拾叁元柒角壹分
172443656495478.508 : 壹佰柒拾贰万肆仟肆佰叁拾陆亿伍仟陆佰肆拾玖万伍仟肆佰柒拾捌元伍角壹分
1464089815075285.868 : 壹仟肆佰陆拾肆万零捌佰玖拾捌亿壹仟伍佰零柒万伍仟贰佰捌拾伍元捌角柒分
4208740518980845.741 : 肆仟贰佰零捌万柒仟肆佰零伍亿壹仟捌佰玖拾捌万零捌佰肆拾伍元柒角肆分
5047641414880008.635 : 伍仟零肆拾柒万陆仟肆佰壹拾肆亿壹仟肆佰捌拾捌万零捌元陆角肆分
4349940096777571.914 : 肆仟叁佰肆拾玖万玖仟肆佰亿玖仟陆佰柒拾柒万柒仟伍佰柒拾壹元玖角壹分
5544201069923231.659 : 伍仟伍佰肆拾肆万贰仟零壹拾亿陆仟玖佰玖拾贰万叁仟贰佰叁拾壹元陆角陆分
2450545160098413.083 : 贰仟肆佰伍拾万伍仟肆佰伍拾壹亿陆仟零玖万捌仟肆佰壹拾叁元零捌分
1617429721447217.472 : 壹仟陆佰壹拾柒万肆仟贰佰玖拾柒亿贰仟壹佰肆拾肆万柒仟贰佰壹拾柒元肆角柒分
5754277862421829.106 : 伍仟柒佰伍拾肆万贰仟柒佰柒拾捌亿陆仟贰佰肆拾贰万壹仟捌佰贰拾玖元壹角壹分
3420591188186047.531 : 叁仟肆佰贰拾万伍仟玖佰壹拾壹亿捌仟捌佰壹拾捌万陆仟零肆拾柒元伍角叁分
7187002944746962.101 : 柒仟壹佰捌拾柒万零贰拾玖亿肆仟肆佰柒拾肆万陆仟玖佰陆拾贰元壹角
4041770373185679.734 : 肆仟零肆拾壹万柒仟柒佰零叁亿柒仟叁佰壹拾捌万伍仟陆佰柒拾玖元柒角叁分
1400688747065779.702 : 壹仟肆佰万陆仟捌佰捌拾柒亿肆仟柒佰零陆万伍仟柒佰柒拾玖元柒角
2356171291436118.7 : 贰仟叁佰伍拾陆万壹仟柒佰壹拾贰亿玖仟壹佰肆拾叁万陆仟壹佰壹拾捌元柒角
5771896869061453.732 : 伍仟柒佰柒拾壹万捌仟玖佰陆拾捌亿陆仟玖佰零陆万壹仟肆佰伍拾叁元柒角叁分
6094377679834665.109 : 陆仟零玖拾肆万叁仟柒佰柒拾陆亿柒仟玖佰捌拾叁万肆仟陆佰陆拾伍元壹角壹分
6359324844138326.752 : 陆仟叁佰伍拾玖万叁仟贰佰肆拾捌亿肆仟肆佰壹拾叁万捌仟叁佰贰拾陆元柒角伍分
4268541389691695.449 : 肆仟贰佰陆拾捌万伍仟肆佰壹拾叁亿捌仟玖佰陆拾玖万壹仟陆佰玖拾伍元肆角伍分
2196199766486444.417 : 贰仟壹佰玖拾陆万壹仟玖佰玖拾柒亿陆仟陆佰肆拾捌万陆仟肆佰肆拾肆元肆角贰分
4345129687941262.805 : 肆仟叁佰肆拾伍万壹仟贰佰玖拾陆亿捌仟柒佰玖拾肆万壹仟贰佰陆拾贰元捌角壹分
295030953041329.237 : 贰佰玖拾伍万零叁佰零玖亿伍仟叁佰零肆万壹仟叁佰贰拾玖元贰角肆分
8383004515528367.751 : 捌仟叁佰捌拾叁万零肆拾伍亿壹仟伍佰伍拾贰万捌仟叁佰陆拾柒元柒角伍分
226366795410014.827 : 贰佰贰拾陆万叁仟陆佰陆拾柒亿玖仟伍佰肆拾壹万零壹拾肆元捌角叁分
8722860502045829.042 : 捌仟柒佰贰拾贰万捌仟陆佰零伍亿零贰佰零肆万伍仟捌佰贰拾玖元零肆分
2503612712312914.283 : 贰仟伍佰零叁万陆仟壹佰贰拾柒亿壹仟贰佰叁拾壹万贰仟玖佰壹拾肆元贰角捌分
3657936193877718.955 : 叁仟陆佰伍拾柒万玖仟叁佰陆拾壹亿玖仟叁佰捌拾柒万柒仟柒佰壹拾捌元玖角陆分
5401041090612852.748 : 伍仟肆佰零壹万零肆佰壹拾亿玖仟零陆拾壹万贰仟捌佰伍拾贰元柒角伍分
4751616545481121.109 : 肆仟柒佰伍拾壹万陆仟壹佰陆拾伍亿肆仟伍佰肆拾捌万壹仟壹佰贰拾壹元壹角壹分
2571711340203990.678 : 贰仟伍佰柒拾壹万柒仟壹佰壹拾叁亿肆仟零贰拾万叁仟玖佰玖拾元陆角捌分
4257069710733356.184 : 肆仟贰佰伍拾柒万零陆佰玖拾柒亿壹仟零柒拾叁万叁仟叁佰伍拾陆元壹角捌分
8416073300684374.347 : 捌仟肆佰壹拾陆万零柒佰叁拾叁亿零陆拾捌万肆仟叁佰柒拾肆元叁角伍分
7317590810128001.378 : 柒仟叁佰壹拾柒万伍仟玖佰零捌亿壹仟零壹拾贰万捌仟零壹元叁角捌分
2432369869159295.881 : 贰仟肆佰叁拾贰万叁仟陆佰玖拾捌亿陆仟玖佰壹拾伍万玖仟贰佰玖拾伍元捌角捌分
380882487824385.537 : 叁佰捌拾万捌仟捌佰贰拾肆亿捌仟柒佰捌拾贰万肆仟叁佰捌拾伍元伍角肆分
8421909969492729.246 : 捌仟肆佰贰拾壹万玖仟零玖拾玖亿陆仟玖佰肆拾玖万贰仟柒佰贰拾玖元贰角伍分
4705762574850697.934 : 肆仟柒佰零伍万柒仟陆佰贰拾伍亿柒仟肆佰捌拾伍万零陆佰玖拾柒元玖角叁分
878585926582717.412 : 捌佰柒拾捌万伍仟捌佰伍拾玖亿贰仟陆佰伍拾捌万贰仟柒佰壹拾柒元肆角壹分
5598299846826462.926 : 伍仟伍佰玖拾捌万贰仟玖佰玖拾捌亿肆仟陆佰捌拾贰万陆仟肆佰陆拾贰元玖角叁分
8445223148058053.184 : 捌仟肆佰肆拾伍万贰仟贰佰叁拾壹亿肆仟捌佰零伍万捌仟零伍拾叁元壹角捌分
8085293732143555.605 : 捌仟零捌拾伍万贰仟玖佰叁拾柒亿叁仟贰佰壹拾肆万叁仟伍佰伍拾伍元陆角壹分
7012523239449419.631 : 柒仟零壹拾贰万伍仟贰佰叁拾贰亿叁仟玖佰肆拾肆万玖仟肆佰壹拾玖元陆角叁分
9055312514350655.817 : 玖仟零伍拾伍万叁仟壹佰贰拾伍亿壹仟肆佰叁拾伍万零陆佰伍拾伍元捌角贰分
5922008774278685.936 : 伍仟玖佰贰拾贰万零捌拾柒亿柒仟肆佰贰拾柒万捌仟陆佰捌拾伍元玖角肆分
2465616929201526.886 : 贰仟肆佰陆拾伍万陆仟壹佰陆拾玖亿贰仟玖佰贰拾万壹仟伍佰贰拾陆元捌角玖分
2295416222062598.385 : 贰仟贰佰玖拾伍万肆仟壹佰陆拾贰亿贰仟贰佰零陆万贰仟伍佰玖拾捌元叁角玖分
3417201104396905.252 : 叁仟肆佰壹拾柒万贰仟零壹拾壹亿零肆佰叁拾玖万陆仟玖佰零伍元贰角伍分
7087070070725956.342 : 柒仟零捌拾柒万零柒佰亿柒仟零柒拾贰万伍仟玖佰伍拾陆元叁角肆分
2292260368771751.078 : 贰仟贰佰玖拾贰万贰仟陆佰零叁亿陆仟捌佰柒拾柒万壹仟柒佰伍拾壹元零捌分
745676920312408.358 : 柒佰肆拾伍万陆仟柒佰陆拾玖亿贰仟零叁拾壹万贰仟肆佰零捌元叁角陆分
8550056513396279.658 : 捌仟伍佰伍拾万零伍佰陆拾伍亿壹仟叁佰叁拾玖万陆仟贰佰柒拾玖元陆角陆分
3594267246582277.676 : 叁仟伍佰玖拾肆万贰仟陆佰柒拾贰亿肆仟陆佰伍拾捌万贰仟贰佰柒拾柒元陆角捌分
6783822682529190.637 : 陆仟柒佰捌拾叁万捌仟贰佰贰拾陆亿捌仟贰佰伍拾贰万玖仟壹佰玖拾元陆角肆分
5123948183881641.964 : 伍仟壹佰贰拾叁万玖仟肆佰捌拾壹亿捌仟叁佰捌拾捌万壹仟陆佰肆拾壹元玖角陆分
327599720647140.694 : 叁佰贰拾柒万伍仟玖佰玖拾柒亿贰仟零陆拾肆万柒仟壹佰肆拾元陆角玖分
8683270558324138.769 : 捌仟陆佰捌拾叁万贰仟柒佰零伍亿伍仟捌佰叁拾贰万肆仟壹佰叁拾捌元柒角柒分
7539363993141614.843 : 柒仟伍佰叁拾玖万叁仟陆佰叁拾玖亿玖仟叁佰壹拾肆万壹仟陆佰壹拾肆元捌角肆分
4700040181786165.741 : 肆仟柒佰万零肆佰零壹亿捌仟壹佰柒拾捌万陆仟壹佰陆拾伍元柒角肆分
1120876881253911.219 : 壹仟壹佰贰拾万捌仟柒佰陆拾捌亿捌仟壹佰贰拾伍万叁仟玖佰壹拾壹元贰角贰分
8063742885706193.538 : 捌仟零陆拾叁万柒仟肆佰贰拾捌亿捌仟伍佰柒拾万陆仟壹佰玖拾叁元伍角肆分
4438673568340534.232 : 肆仟肆佰叁拾捌万陆仟柒佰叁拾伍亿陆仟捌佰叁拾肆万零伍佰叁拾肆元贰角叁分
9066669080591146.134 : 玖仟零陆拾陆万陆仟陆佰玖拾亿捌仟零伍拾玖万壹仟壹佰肆拾陆元壹角叁分
6805561508485458.173 : 陆仟捌佰零伍万伍仟陆佰壹拾伍亿零捌佰肆拾捌万伍仟肆佰伍拾捌元壹角柒分
5261341407994295.141 : 伍仟贰佰陆拾壹万叁仟肆佰壹拾肆亿零柒佰玖拾玖万肆仟贰佰玖拾伍元壹角肆分
3751188531041381.97 : 叁仟柒佰伍拾壹万壹仟捌佰捌拾伍亿叁仟壹佰零肆万壹仟叁佰捌拾壹元玖角柒分
2746804309074598.004 : 贰仟柒佰肆拾陆万捌仟零肆拾叁亿零玖佰零柒万肆仟伍佰玖拾捌元整
2982111544602626.512 : 贰仟玖佰捌拾贰万壹仟壹佰壹拾伍亿肆仟肆佰陆拾万贰仟陆佰贰拾陆元伍角壹分
1783603616537628.291 : 壹仟柒佰捌拾叁万陆仟零叁拾陆亿壹仟陆佰伍拾叁万柒仟陆佰贰拾捌元贰角玖分
4304094752047008.323 : 肆仟叁佰零肆万零玖佰肆拾柒亿伍仟贰佰零肆万柒仟零捌元叁角贰分
9157498715840118.56 : 玖仟壹佰伍拾柒万肆仟玖佰捌拾柒亿壹仟伍佰捌拾肆万零壹佰壹拾捌元伍角陆分
752798602756870.528 : 柒佰伍拾贰万柒仟玖佰捌拾陆亿零贰佰柒拾伍万陆仟捌佰柒拾元伍角叁分
7351346462060597.769 : 柒仟叁佰伍拾壹万叁仟肆佰陆拾肆亿陆仟贰佰零陆万零伍佰玖拾柒元柒角柒分
7696622772413962.37 : 柒仟陆佰玖拾陆万陆仟贰佰贰拾柒亿柒仟贰佰肆拾壹万叁仟玖佰陆拾贰元叁角柒分
7774689339826473.331 : 柒仟柒佰柒拾肆万陆仟捌佰玖拾叁亿叁仟玖佰捌拾贰万陆仟肆佰柒拾叁元叁角叁分
2353175690340175.691 : 贰仟叁佰伍拾叁万壹仟柒佰伍拾陆亿玖仟零叁拾肆万零壹佰柒拾伍元陆角玖分
5558017639646498.928 : 伍仟伍佰伍拾捌万零壹佰柒拾陆亿叁仟玖佰陆拾肆万陆仟肆佰玖拾捌元玖角叁分
7978448881240863.113 : 柒仟玖佰柒拾捌万肆仟肆佰捌拾捌亿捌仟壹佰贰拾肆万零捌佰陆拾叁元壹角壹分
5217216607365757.881 : 伍仟贰佰壹拾柒万贰仟壹佰陆拾陆亿零柒佰叁拾陆万伍仟柒佰伍拾柒元捌角捌分
2115978695612406.99 : 贰仟壹佰壹拾伍万玖仟柒佰捌拾陆亿玖仟伍佰陆拾壹万贰仟肆佰零陆元玖角玖分
3097663514137520.684 : 叁仟零玖拾柒万陆仟陆佰叁拾伍亿壹仟肆佰壹拾叁万柒仟伍佰贰拾元陆角捌分
6671288636026605.743 : 陆仟陆佰柒拾壹万贰仟捌佰捌拾陆亿叁仟陆佰零贰万陆仟陆佰零伍元柒角肆分
5075295226006483.834 : 伍仟零柒拾伍万贰仟玖佰伍拾贰亿贰仟陆佰万陆仟肆佰捌拾叁元捌角叁分
216426442267988.837 : 贰佰壹拾陆万肆仟贰佰陆拾肆亿肆仟贰佰贰拾陆万柒仟玖佰捌拾捌元捌角肆分
5041463668883359.771 : 伍仟零肆拾壹万肆仟陆佰叁拾陆亿陆仟捌佰捌拾捌万叁仟叁佰伍拾玖元柒角柒分
8745861306439447.016 : 捌仟柒佰肆拾伍万捌仟陆佰壹拾叁亿零陆佰肆拾叁万玖仟肆佰肆拾柒元零贰分
8875021695409890.812 : 捌仟捌佰柒拾伍万零贰佰壹拾陆亿玖仟伍佰肆拾万玖仟捌佰玖拾元捌角壹分
6789273576519505.933 : 陆仟柒佰捌拾玖万贰仟柒佰叁拾伍亿柒仟陆佰伍拾壹万玖仟伍佰零伍元玖角叁分
4077919201181907.753 : 肆仟零柒拾柒万玖仟壹佰玖拾贰亿零壹佰壹拾捌万壹仟玖佰零柒元柒角伍分
5080255031907030.865 : 伍仟零捌拾万贰仟伍佰伍拾亿叁仟壹佰玖拾万柒仟零叁拾元捌角柒分
8103842363463430.509 : 捌仟壹佰零叁万捌仟肆佰贰拾叁亿陆仟叁佰肆拾陆万叁仟肆佰叁拾元伍角壹分
1929306840785438.403 : 壹仟玖佰贰拾玖万叁仟零陆拾捌亿肆仟零柒拾捌万伍仟肆佰叁拾捌元肆角
1946922527086036.151 : 壹仟玖佰肆拾陆万玖仟贰佰贰拾伍亿贰仟柒佰零捌万陆仟零叁拾陆元壹角伍分
8025753813910402.182 : 捌仟零贰拾伍万柒仟伍佰叁拾捌亿壹仟叁佰玖拾壹万零肆佰零贰元壹角捌分
408072141313036.134 : 肆佰零捌万零柒佰贰拾壹亿肆仟壹佰叁拾壹万叁仟零叁拾陆元壹角叁分
9146427869318014.652 : 玖仟壹佰肆拾陆万肆仟贰佰柒拾捌亿陆仟玖佰叁拾壹万捌仟零壹拾肆元陆角伍分
5731863535021669.794 : 伍仟柒佰叁拾壹万捌仟陆佰叁拾伍亿叁仟伍佰零贰万壹仟陆佰陆拾玖元柒角玖分
1338039646230063.387 : 壹仟叁佰叁拾捌万零叁佰玖拾陆亿肆仟陆佰贰拾叁万零陆拾叁元叁角玖分
4403089727376019.294 : 肆仟肆佰零叁万零捌佰玖拾柒亿贰仟柒佰叁拾柒万陆仟零壹拾玖元贰角玖分
8927982026667733.845 : 捌仟玖佰贰拾柒万玖仟捌佰贰拾亿贰仟陆佰陆拾陆万柒仟柒佰叁拾叁元捌角伍分
2051037606753393.258 : 贰仟零伍拾壹万零叁佰柒拾陆亿零陆佰柒拾伍万叁仟叁佰玖拾叁元贰角陆分