为什么要返回其中一个值?

时间:2017-04-05 13:56:36

标签: c#

编译器返回其中一个值(在我的示例中为“рублей”)。为什么会这样?谢谢你的答案。 代码在这里:

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 "рублей";
            }
         }
    }

2 个答案:

答案 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;你可能真的很惊讶结果和/或无声错误很难找到,所以一定要检查你真正转换的是什么