2012-06-19 7 views
0

J'ai besoin d'aide pour convertir une chaîne en double avec 7 décimales. J'ai une chaîne "00000827700000" et besoin il a converti en 82.77Convertir une chaîne en double

Essayé en utilisant String.Format() avec {0: N7} sans succès.

+9

Le format * toujours * comme ça? Avec les étoiles, et le nombre exact de caractères? Êtes-vous sûr que 'double 'est le type le plus approprié ici, plutôt que' decimal'? –

+2

J'ai modifié ma réponse en fonction de la question éditée. Cela aiderait vraiment si vous aviez clarifié cela pour commencer - et répondu aux autres questions posées dans les commentaires. –

+1

Bienvenue dans StackOverflow! En passant, avoir Jon Skeet répondre à votre première question, c'est comme avoir Eric Clapton à pied pour vous aider lorsque vous avez demandé à quelqu'un de "vous apprendre quelques accords". S'il vous plaît tenir compte de son conseil. – Zoot

Répondre

7

On dirait que vous pourrait utiliser:

decimal x = decimal.Parse(text.Substring(0, 7) + "." + 
          text.Substring(7), 
          CultureInfo.InvariantCulture); 

Ce serait en fait analyser à 82,7700000, comme decimal conserve zéros à la fin (dans une certaine mesure) mais peut-être est assez bon? Pas, vous pouvez changer le second argument de

text.Substring(7).TrimEnd('0') 

Notez que je recommande fortement à au moins envisager à l'aide decimal au lieu de double. Vous n'avez pas expliqué ce que cette valeur représente, mais si c'est stocké en tant que chiffres décimaux que vous devez conserver, ça sent plus comme decimal pour moi.

+1

bien, maintenant je ne peux pas l'écrire plus clairement que vous avez fait. J'utiliserais toujours TryParse, mais à part ça, ce ne serait pas différent. En fait, le second argument pourrait simplement être 'text.Substring (7) .TrimEnd ('0')' maintenant car il n'y a pas de caractères corrompus. – CaffGeek

+0

@Chad: Je n'utiliserais 'TryParse' que s'il était légitime que ce soit de mauvaises données. Je m'attends à ce que ce soit * en fait * généré par la machine, et je serais heureux qu'une exception soit lancée ici comme si l'analyse XML (par exemple) échouait. Bon point sur l'appel Substring si - édition ... –

+0

assez juste, j'ai effectivement pensé à un moyen potentiellement plus simple, voir ma réponse éditée. Je ne suis pas sûr de ce qui est le plus rapide. – CaffGeek

3

Sur la base de l'édition, il pourrait être simplifié comme

var text = "00000827700000"; 
var x = decimal.Parse(text, CultureInfo.InvariantCulture)/10000000; 
Console.Write(String.Format("{0:N7}", x)); 
+2

On dirait que les étoiles étaient un hareng rouge ... –

+0

@JonSkeet, je viens de voir que ... modifier le temps. – CaffGeek

+0

C'est le meilleur que je peux trouver, les formats avec 7 décimales montrant, et convertit la valeur en une décimale correcte, plutôt que de la laisser tapée à la lettre – CaffGeek

Questions connexes