2010-01-23 18 views
4

Le code suivant renvoie actuellement:Comment supprimer les zéros et les virgules décimales des chaînes décimales?

12.1 
12.100 
12.1000 
12.00 
12 
12.0000 

Comment puis-je changer de sorte qu'il génère:

12.1 
12.1 
12.1 
12 
12 
12 

Math.Round semble être la chose, mais il me fait définir le nombre de décimales I vouloir, mais je veux qu'ils soient variables comme ci-dessus. S'il n'y a pas de méthode mathématique pour le faire, je vais supprimer les zéros et les virgules décimaux du côté droit des chaînes, mais je pense qu'il y a une façon mathématique de gérer cela.

using System; 
using System.Collections.Generic; 

namespace Test8834234 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 

      List<string> decimalsAsStrings = new List<string> 
      { 
       "12.1", 
       "12.100", 
       "12.1000", 
       "12.00", 
       "12", 
       "12.0000" 
      }; 

      foreach (var decimalAsString in decimalsAsStrings) 
      { 
       decimal dec = decimal.Parse(decimalAsString); 
       Console.WriteLine(dec); 
      } 

      Console.ReadLine(); 

     } 
    } 
} 

Répondre

10

Vous pouvez également utiliser toString décimal avec un paramètre:

string s = dec.ToString("0.#"); 

Remarque: Vous devrez peut-être un problème d'internationalisation avec votre code. La façon dont vous l'avez codé, il utilisera les informations de culture de l'ordinateur de l'utilisateur, qui peut avoir autre chose que . pour le séparateur décimal. Cela peut entraîner votre programme à donner des résultats incorrects pour les utilisateurs qui ont . pour séparateur de milliers.

Si vous voulez garantir que la méthode d'analyse se comportera toujours de la même manière, vous pouvez utiliser CultureInfo.InvariantCulture. Si vous voulez réellement analyser la chaîne en fonction des paramètres de culture de l'utilisateur, ce que vous faites est bon.

4

Utilisation:

Console.WriteLine("{0:0.####}", dec); 

En savoir plus sur les chaînes de format numérique de here...

1

Ce format de chaîne devrait rendre votre journée: "0. #############################". Gardez à l'esprit que les nombres décimaux peuvent avoir au plus 29 chiffres significatifs.

Exemples:

? (1000000.00000000000050000000000m).ToString("0.#############################") 
-> 1000000.0000000000005 

? (1000000.00000000000050000000001m).ToString("0.#############################") 
-> 1000000.0000000000005 

? (1000000.0000000000005000000001m).ToString("0.#############################") 
-> 1000000.0000000000005000000001 

? (9223372036854775807.0000000001m).ToString("0.#############################") 
-> 9223372036854775807 

? (9223372036854775807.000000001m).ToString("0.#############################") 
-> 9223372036854775807.000000001 
0
public static string RemoveDecimalsFromString(string input) 
{ 
    decimal IndexOfDot = input.IndexOf("."); 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < IndexOfDot; i++) 
    { 
     sb.Append(input[i]); 
    } 

    return sb.ToString(); 
}