web-dev-qa-db-fra.com

Supprimer les derniers caractères d'une chaîne en C #. Une manière élégante?

J'ai une chaîne numérique comme ceci 2223,00. Je voudrais le transformer en 2223. Ceci est: sans les informations after le ",". Supposons qu'il n'y aura que deux décimales après le ",".

J'ai fait:

str = str.Remove(str.Length - 3, 3);

Y a-t-il une solution plus élégante? Peut-être en utilisant une autre fonction? -Je n'aime pas mettre des nombres explicites-

84
Kani

En fait, vous pouvez simplement utiliser la suppression de surcharge qui prend un paramètre:

str = str.Remove(str.Length - 3);

Toutefois, si vous essayez d’éviter de coder en dur la longueur, vous pouvez utiliser:

str = str.Remove(str.IndexOf(','));
171
Reed Copsey

Peut-être ceci:

str = str.Split(",").First();
15
k.m

Cela vous retournera une chaîne excluant tout ce qui suit la virgule.

str = str.Substring(0, str.IndexOf(','));

Bien sûr, ceci suppose votre chaîne a réellement une virgule avec des décimales. Le code ci-dessus échouera s'il ne le fait pas. Vous voudriez faire plus de vérifications:

commaPos = str.IndexOf(',');
if(commaPos != -1)
    str = str.Substring(0, commaPos)

Je suppose que vous travaillez avec une chaîne pour commencer. Idéalement, si vous travaillez avec un nombre pour commencer, comme un nombre à virgule flottante ou double, vous pouvez simplement le transtyper en un int, puis faites myInt.ToString() comme:

myInt = (int)double.Parse(myString)

Cela analyse le double en utilisant la culture actuelle (ici aux États-Unis, nous utilisons . Pour les points décimaux). Cependant, cela suppose à nouveau que votre chaîne d'entrée peut être analysée.

6
String.Format("{0:0}", 123.4567);      // "123"

Si votre valeur initiale est une décimale en chaîne, vous devrez convertir

String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture))  //3.5

Dans cet exemple, j'ai choisi la culture invariante, mais vous pouvez utiliser celle de votre choix.

Je préfère utiliser la fonction de formatage, car on ne sait jamais si le nombre décimal peut contenir 2 ou 3 chiffres dans le futur.

Edit: Vous pouvez également utiliser Truncate pour tout supprimer après le, ou.

Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));
4
Patrick Desjardins

Vous pouvez utiliser TrimEnd. C'est efficace aussi et a l'air propre.

"Name,".TrimEnd(',');
1
Abdul Munim

Utilisation:

public static class StringExtensions
{
    /// <summary>
    /// Cut End. "12".SubstringFromEnd(1) -> "1"
    /// </summary>
    public static string SubstringFromEnd(this string value, int startindex)
    {
        if (string.IsNullOrEmpty(value)) return value;
        return value.Substring(0, value.Length - startindex);
    }
}

Je préfère une méthode d'extension ici pour deux raisons:

  1. Je peux l'enchaîner avec Substring. Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
  2. La vitesse.
1
Sebastian Ax

Vous pouvez utiliser LastIndexOf et Substring combinés pour que tous les caractères se trouvent à gauche du dernier index de la virgule dans l'aiguille.

string var = var.Substring (0, var.LastIndexOf (','));

1
Nothingman

Essayez ce qui suit. Cela a fonctionné pour moi:

str = str.Split(',').Last();
0
Hamidreza Amini