编译器返回其中一个值(在我的示例中为“рублей”)。为什么会这样?谢谢你的答案。 代码在这里:
public static class PluralizeTask
{
public static string PluralizeRubles(int count)
{
string numString = count.ToString();
char endOfstring = numString[numString.Length - 1];
int numEndOfstring = endOfstring;
{
if (numEndOfstring == 1) return "рубль";
else if (numEndOfstring > 1 && numEndOfstring < 5) return "рубля";
else return "рублей";
}
}
}
答案 0 :(得分:3)
考虑构造numEndOfstring
的方式:取一个整数,将其转换为一系列字符,然后从中选择最后一个字符。此int
值将包含在'0'
.. '9'
范围内。因此,221
不会生成1
,它会生成'1'
(请注意单引号)。
要解决此问题,请使用以下表达式:
int numEndOfstring = count % 10;
请注意,根据俄语规则,你的复数将保持不正确,因为它不会正确地对待青少年数字(即“11рубль”,“12рубля”等)你需要考虑最后两个数字的数字,以便正确执行此操作。您可以使用
获得代表最后两位数字的数字int lastTwoDigits = count % 100;
答案 1 :(得分:0)
这里的问题是:
int numEndOfstring = endOfstring;
在这里,您获取字符串中的最后一个字符,并将它编号分配给numEndOfString
。因此,对于char 0
,您可以分配其数字为48,结束时numEndOfString
持有48(而不是0)。你可以通过几种方式解决这个问题。一个是@dasblinkenlight建议的方式。您有时可能想要使用的其他内容是解析int numEndOfstring = int.Parse(endOfstring)
(甚至可以使用字符串),或int numEndOfstring = endOfstring - '0'
或int numEndOfstring = endOfstring - 48
。实际上两者几乎都是一样的。这里的魔力是你计算你的char从零到多远的事实(它是char数48)。但要小心!这将很乐意接受任何炭,例如&#39;吨&#39;你可能真的很惊讶结果和/或无声错误很难找到,所以一定要检查你真正转换的是什么