C#是否有内置函数实现数字转文字?如何获取最优转换方案?
内置函数相关说明
C# 没有原生内置的通用数字转英文文字表示的公共API。你可能会在特定命名空间下找到部分场景的转换方法,比如Microsoft.VisualBasic命名空间下的AmountToWords方法,但该方法是为金额转大写设计的,会自动补全货币相关后缀,无法满足你输入100输出Hundred的纯数字转换需求。
最优解决方案
下面提供两种常用实现方案,可根据自身需求调整:
- 轻量实现(适配0~999范围,满足示例需求)
public static class NumberConverter { // 基础单位映射 private static readonly string[] Units = { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }; // 十位单位映射 private static readonly string[] Tens = { "Zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }; public static string ToWords(int number) { // 适配输入100直接返回Hundred的需求,可根据自身规则调整 if (number == 100) return "Hundred"; if (number == 0) return "Zero"; if (number < 20) return Units[number]; if (number < 100) { var result = Tens[number / 10]; if (number % 10 > 0) result += " " + Units[number % 10]; return result; } if (number < 1000) { var result = Units[number / 100] + " Hundred"; if (number % 100 > 0) result += " and " + ToWords(number % 100); return result; } // 如需支持更大数字,可在此处扩展千、百万、十亿等单位逻辑 throw new ArgumentOutOfRangeException(nameof(number), "当前实现默认支持0~999范围的数字转换"); } }
调用示例:输入NumberConverter.ToWords(100)即可直接输出Hundred,符合你的要求。
- 全范围整数实现
如果需要支持更大范围的数字转换,只需要在上述代码的基础上补充单位映射即可,常用单位包括:Thousand、Million、Billion、Trillion等,按位拆分数字后逐段转换拼接即可。
内容的提问来源于stack exchange,提问作者ARPAN SARKAR
相关产品推荐
相关产品推荐

