Le compilateur renvoie l'une des valeurs (dans mon exemple est "рублей"). Pourquoi cela est-il ainsi? Merci de votre réponse. Le code ici:

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 "рублей";
            }
         }
    }
c#
0
Alexei196 5 avril 2017 à 16:56

2 réponses

Meilleure réponse

Considérez la façon dont vous construisez numEndOfstring: vous prenez un entier, le convertissez en une séquence de caractères, puis choisissez le dernier caractère . Cette valeur int va être dans la plage '0' .. '9', inclus. Par conséquent, 221 ne produira pas 1, il produira '1' (notez les guillemets simples).

Pour résoudre ce problème, utilisez cette expression:

int numEndOfstring = count % 10;

Notez que votre pluralisation restera incorrecte selon les règles de la langue russe, car elle ne puraliserait pas correctement les nombres d'adolescents (c'est-à-dire "11 рубль", "12 рубля", etc.) Vous devez considérer les deux derniers chiffres du numéro afin de le faire correctement. Vous obtenez le nombre qui représente les deux derniers chiffres avec

int lastTwoDigits = count % 100;
3
Sergey Kalinichenko 5 avril 2017 à 14:01

Le problème ici est la ligne:

int numEndOfstring = endOfstring;

Ici, vous prenez le dernier caractère d'une chaîne et attribuez son numéro à un numEndOfString. Donc, pour char 0, vous attribuez son numéro qui est 48, vous terminez par numEndOfString tenant un 48 (au lieu de 0). Vous pouvez contourner ce problème de plusieurs manières. La première est la manière dont @dasblinkenlight suggère. D'autres que vous voudrez peut-être parfois utiliser consistent à analyser int numEndOfstring = int.Parse(endOfstring) (fonctionne même avec des chaînes), ou int numEndOfstring = endOfstring - '0' ou int numEndOfstring = endOfstring - 48. En fait, les deux derniers sont pratiquement les mêmes. La magie ici est le fait que vous calculez à quelle distance est votre caractère de zéro (qui a le numéro de caractère 48). Attention cependant! Cela prendra volontiers n'importe quel caractère, par exemple 't' et vous pourriez avoir des résultats vraiment surprenants et / ou des erreurs silencieuses difficiles à trouver, alors assurez-vous de vérifier ce que vous convertissez vraiment

0
Rao 5 avril 2017 à 14:15