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-
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(','));
Peut-être ceci:
str = str.Split(",").First();
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.
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")));
Vous pouvez utiliser TrimEnd
. C'est efficace aussi et a l'air propre.
"Name,".TrimEnd(',');
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:
Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
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 (','));
Essayez ce qui suit. Cela a fonctionné pour moi:
str = str.Split(',').Last();