使用C#我需要将一个整数转换为它的单词表示,并且最多只能达到5到10.有没有比这更好的方法呢?
static string[] numberwords =
{
"zero",
"one",
"two",
"three",
"four",
"five"
};
public static string GetNumberAsString(int value)
{
return numberwords[value];
}
答案 0 :(得分:1)
你需要走多远?
我的猜测是你需要几个数组来做你需要的一般情况,比如“一个”到“二十”,“二十”到“九十”几十,“千”,“百万”,等
答案 1 :(得分:1)
为什么不在C#中使用关联数组(Dictionary<int,string>
)?如果使用它,则无需担心字符串的顺序。因为当你添加更多的数字并且它们不一定是连续的时候它会成为一场噩梦。当然,如果你的数字范围非常小,你的方法可以为你节省一些空间。
答案 2 :(得分:1)
对于这种特定情况(有限的数字范围),一个有趣的替代方案是使用枚举,然后在扩展方法中将转换包装到字符串。
下面的代码显示了使用扩展方法从枚举值转换为字符串,并尝试转换枚举范围之外的值。
public enum NumberWords
{
zero,
one,
two,
three,
four,
five
}
public static class IntExtensions
{
public static string ToWord(this int input)
{
return ((NumberWords)input).ToString();
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(((NumberWords)5).ToString());
Console.WriteLine(0.ToWord());
Console.WriteLine(1.ToWord());
Console.WriteLine(2.ToWord());
Console.WriteLine(123.ToWord());
Console.ReadLine();
}
}
答案 3 :(得分:0)
短:
没有
长:
.NET框架无法实现。 一个改进建议:您可以从依赖于语言的配置文件中读取数字。
答案 4 :(得分:0)
为了捎带@Ravi的建议,你可以在Dictionary<DigitPlace, Dictionary<int, string>
之类的自定义词典中按地点(数字,数十,数百等)查找每个数字(你在哪里创建Enum
for { {1}})。当然这将是特定于语言的。
<强>示例:强>
DigitPlace
如果您想按照我的建议创建类型扩展器,这里有一个示例。
Ones, 1, "one"
Ones, 2, "two"
...
Tens, 3, "thirty-"
...
Hundreds, 6, "six-hundred"
...
使用:
public enum NumberedWords
{
zero = 0,
one = 1,
two = 2,
three = 3,
four = 4,
five = 5
}
public static string ToName(this int value)
{
return (NumberedWords)value;
}