编辑
2025-09-19
C#
00

目录

Helper类设计
使用示例
总结

在财务软件开发中,经常需要将数字金额转换为大写形式以满足打印发票或合同的需求。本文将介绍如何在C#中编写一个辅助类,用于将数字金额转换为中文大写金额的字符串表示。

Helper类设计

我们的目标是创建一个静态的Helper类,该类包含一个静态方法ConvertToChineseCapital,用于执行转换操作。转换规则遵循中文货币的表达习惯,即“壹、贰、叁、肆、伍、陆、柒、捌、玖”代表数字1-9,“拾、佰、仟、万、亿”等为数位单位。

C#
public static class NumberToChineseCapitalHelper { private static readonly char[] ChineseNumbers = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; private static readonly string[] Units = { "", "拾", "佰", "仟" }; private static readonly string[] BigUnits = { "", "万", "亿", "兆" }; public static string ConvertToChineseCapital(decimal amount) { if (amount == 0m) return "零元整"; if (amount >= 10000000000000000m) // 处理数值过大的情况 throw new ArgumentOutOfRangeException(nameof(amount), "金额超出处理范围。"); StringBuilder builder = new StringBuilder(); // 处理整数部分 long integralPart = (long)Math.Floor(amount); int fractionalPart = (int)Math.Round((amount - integralPart) * 100); // 四舍五入到分 // 如果没有小数部分,直接添加"整"字 if (fractionalPart == 0) { builder.Append("整"); } else { // 处理小数点后两位,即分和角 if (fractionalPart < 10) { if (fractionalPart > 0) builder.Append(ChineseNumbers[fractionalPart] + "分"); if (fractionalPart == 0 || integralPart > 0) builder.Insert(0, "零角"); } else { if (fractionalPart % 10 > 0) builder.Append(ChineseNumbers[fractionalPart % 10] + "分"); if (fractionalPart / 10 > 0) builder.Insert(0, ChineseNumbers[fractionalPart / 10] + "角"); } } if (integralPart == 0) { builder.Insert(0, "零元"); } else { builder.Insert(0, "元"); bool zeroFlag = false; // 标记是否需要插入"零" for (int i = 0; integralPart > 0; i++) { string temp = ""; int unitGroup = (int)(integralPart % 10000); if (unitGroup > 0) { for (int j = 0; j < 4; j++) { int num = unitGroup % 10; if (num > 0) { temp = ChineseNumbers[num] + Units[j] + temp; zeroFlag = true; // 只要有非零数字,就可能需要后续的零 } else if (zeroFlag) { temp = "零" + temp; zeroFlag = false; // 插入"零"后,重置标记 } unitGroup /= 10; } temp += BigUnits[i]; // 单位(万、亿等) } else if (zeroFlag) { temp = "零" + temp; // 在数位间插入零 zeroFlag = false; // 重置标记 } builder.Insert(0, temp); integralPart /= 10000; } } return builder.ToString().TrimStart('零'); } }

使用示例

下面是如何使用这个NumberToChineseCapitalHelper类将数字金额转换为大写金额的示例:

C#
decimal amount = 1237890001.51m; string chineseCapital = NumberToChineseCapitalHelper.ConvertToChineseCapital(amount); Console.WriteLine(chineseCapital);

image.png

总结

本文介绍了如何在C#中实现一个将数字金额转换为中文大写金额的辅助类。这个类可以处理高达兆位的金额,并且能够正确处理小数点后两位的角和分。通过这个Helper类,可以方便地在需要的地方进行金额的中文大写转换,满足财务软件开发中的相关需求。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!