Moyen plus facile de prévenir les numéros de montrer en exposant la notation

Je vais compter sur le fait de dire qu'aucune question n'est une question stupide, mais j'ai un peu stupide de demander.

EDIT:

Semble que cette question a été posé et répondu à quelques reprises ici déjà, mais à l'aide de titres que je n'ai pas rencontré lors de la recherche de doublons. Voici quelques related posts:

  1. Double pour la conversion de chaîne sans notation scientifique
  2. Comment convertir le double de chaîne sans la puissance de 10 la représentation (E-05)
  3. Place avec une réponse (Jon Skeet): http://www.yoda.arachsys.com/csharp/DoubleConverter.cs

Question D'Origine:

J'ai une application que, parfois, les magasins de certains décemment petit nombre, comme 0.000023425. Ces nombres sont chargés en TextBox contrôles pour les utilisateurs à modifier. Le inventée suivant montre l'exemple de mon problème:

Dim number As Double = 0.000023425
someTextBox.Text = number.ToString() ' Shows "2.3425E-05"

Comme mentionné, le texte qui apparaît est 2.3425E-05, qui n'est pas très intuitive pour l'utilisateur de voir, en plus j'ai des numéros encore plus précis (à 19 chiffres après la virgule). Je voudrais la sortie à point fixe. Bien sûr, je pourrais facilement et proprement le faire:

number.ToString("F20") ' Shows "0.00002342500000000000"

Mais ensuite il y a une fâcheuse nombre de zéros à gauche. Donc, pour remédier à cela, j'ai pu faire:

number.ToString("#,##0.####################") ' Shows "0.000023425"

Qui est ce que je veux, mais est-il une meilleure façon de le faire que l'avoir géant laid chaîne de format? Alors, ok, c'est pas moche, mais il y a certainement une manière différente, non? Mon but est de montrer la valeur brute être stockées dans la base de données d'une manière amicale, et je préfère ne pas avoir à forcer un format sur le nombre.

Merci!

Mise à JOUR

Peut-être je l'ai dit un peu trop dans le post. Après quelques essais, j'ai trouvé que le fait de changer le type de données sous-jacente à Decimal résout le problème.

Dim number As Decimal = 0.000023425
someTextBox.Text = number.ToString() ' Shows "0.000023425" instead of "2.3425E-05"

Il semble donc qu'il Doubles ne sont pas assez précis pour être affiché normalement?

MODIFIER

Je trouvé un post (mais sans upvotes) qui rejette simplement le Double de la valeur comme un nombre Décimal avant de faire un .ToString() sur elle, ce qui a l'effet désiré. Est-il une raison pourquoi je ne voudrais pas le faire? Peut-être le casting de Decimal a le potentiel pour mettre fin à une valeur différente de celle de la Double (même si c'est une quantité négligeable), donc peut-être la #,##0.#################... chaîne de format est plus sûr.

U ne signifie quelque chose comme nombre.ToString("F09")
Jetez un oeil à cette-stackoverflow.com/questions/1546113/.... Jon Skeet utilitaire de la classe a l'air prometteur.
Oh et BTW - ce n'est certainement PAS une question stupide!
Je n'ai que comme un exemple. Mon but est de ne pas avoir à formater le numéro à faire afficher correctement.
Jon classe utilitaire est exactement la solution que je voulais, mais il semble exagéré. Je n'ai pas vraiment besoin de plus de 19 ans de chiffres de précision, et la base de données ne va pas prendre quelque chose de plus grand qu'un double de la précision, de toute façon (il n'). Si vous modifiez votre commentaire dans une réponse je serai heureux de l'accepter comme réponse.

OriginalL'auteur Cᴏʀʏ | 2009-10-21