Supprimer les 0 de la fin d’une valeur décimale

J’ai une valeur décimale qui a un nombre variable de chiffres après le . , par exemple:

 0.0030 0.0310 0.0001 1.1200 

Comment puis-je écrire une fonction dynamic qui supprime 0 à la fin de la décimale?

 ssortingng.Format("{0:0.#####}", 0.0030) 

ou

 var money=1.3000m; money.ToSsortingng("0.#####"); 

Pour référence ultérieure, je recommande la référence rapide .NET Format Ssortingng de John Sheehan.

Vous pouvez également modifier le nombre décimal lui-même pour que tout ToSsortingng () vous donne ce que vous voulez (plus de détails dans ma réponse ici ):

 public static decimal Normalize(decimal value) { return value/1.000000000000000000000000000000000m; } 
 decimal value = 0.0030m; value.ToSsortingng(“G29″); 

Edit: Le formateur G fonctionne, le seul problème est qu’il passe à la notation scientifique s’il ya trop de chiffres significatifs dans la décimale originale. Pas si idéal.

Consultez la documentation “Le spécificateur de format Général (” G “)” ici: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatSsortingng

Je déjeune, alors j’ai fait un petit test:

 decimal d1 = 0.000100m; decimal d2 = 0.001000000000000000000000m; decimal d3 = 0.000000000000001000000000m; Console.WriteLine(Environment.NewLine + "input decimal: 0.000100m"); Console.WriteLine("G " + d1.ToSsortingng("G")); Console.WriteLine("G29 " + d1.ToSsortingng("G29")); Console.WriteLine("0.####### " + d1.ToSsortingng("0.#######")); Console.WriteLine(Environment.NewLine + "input decimal: 0.001000000000000000000000m"); Console.WriteLine("G " + d2.ToSsortingng("G")); Console.WriteLine("G29 " + d2.ToSsortingng("G29")); Console.WriteLine("0.####### " + d2.ToSsortingng("0.#######")); Console.WriteLine(Environment.NewLine + "input decimal: 0.000000000000001000000000m"); Console.WriteLine("G " + d3.ToSsortingng("G")); Console.WriteLine("G29 " + d3.ToSsortingng("G29")); Console.WriteLine("0.####### " + d3.ToSsortingng("0.#######")); 

Sortie:

 input decimal: 0.000100m G 0.000100 G29 0.0001 0.####### 0.0001 input decimal: 0.001000000000000000000000m G 0.001000000000000000000000 G29 0.001 0.####### 0.001 input decimal: 0.000000000000001000000000m G 0.000000000000001000000000 G29 1E-15 0.####### 0 

Hmm, il s’agit d’un problème de formatage d’affichage (les zéros sont ajoutés lorsque vous convertissez la décimale en chaîne).

Vous devez voir où dans le code vous voyez les zéros de fin. Est-ce après un appel à .ToSsortingng ()? Essayez de jouer avec les différentes chaînes de formatage:

 .ToSsortingng("#"); .ToSsortingng("0.00"); .ToSsortingng("#.##"); 

Etc. La meilleure façon de procéder consiste simplement à expérimenter différentes valeurs possibles.

 decimal m = 0.030000m; Console.Write(m.ToSsortingng("0.##########")); 

Assurez-vous juste que vous avez assez de #s pour le nombre de décimales que vous voulez afficher

J’utilise le suivant. Il garantit que toute décimale (pour laquelle la précision maximale est de 29 décimales) affichera tous les chiffres disponibles sans précision, sans zéros, et sans que votre code ait besoin d’une longue chaîne de marques de hachage.

 if (value is Decimal) value = ((Decimal)value).ToSsortingng("0.".PadRight(29, '#'), culture); 
  public static ssortingng GentlyRemoveEndZeros(ssortingng input) { // if (input == null) return null; // if (input == "") return ""; if (input.Contains(".")) return input.TrimEnd('0').TrimEnd('.'); return input; } 

Tronquer les zéros de fin est très facile, résolvez-le avec une conversion en duplex:

  decimal mydecimal = decimal.Parse("1,45000000"); //(I) decimal truncate = (decimal)(double)mydecimal; //(II) 

(I) -> Analyser la valeur décimale à partir de n’importe quelle source de chaîne.

(II) -> Premièrement: Cast pour doubler cela supprimer les zéros de fin. Seconde: Autre conversion en décimale car il n’existe pas de conversion implicite de décimale en double et vice-versa)