2012-10-11 4 views
0

J'ai créé un programme pour lire/écrire avec des données d'un autre programme. Je définis une valeur de 7 (de type memory real) dans le programme, puis quand je lis la valeur dans Visual Studio, il me donne une chaîne 7.0000000000000. J'ai donc créé cet extrait de conversion qui fonctionne pour les données de type int qui me donne aussi une chaîne en VS. Je ne connais pas la différence entre ces 2 types de données mais logiquement si les deux types de données me donnent une chaîne, je devrais être capable d'exécuter ce code. Pourquoi les données réelles de la mémoire saute le si ici?int à inconnu à la question de la double conversion

if (Regex.IsMatch(value, "^[0-9 ]+$")) 
       { 
        ValueBox.Text = Double.Parse(value).ToString(); 
       } 
       else 
       { 
        ValueBox.Text = value; 
       } 

EDIT: J'utilise 2 dll données, je crois qu'il ya un problème de conversion dans le dll, mais mon code devrait encore travail.

EDIT 2: Ce code est une partie de mon programme, la valeur et d'autres variables sont déjà définies

+0

Avez-vous essayé de reproduire ce localement dans la fonction? c'est-à-dire déclarer et initialiser 'value' avant la condition? Cela pourrait aider à voir quel est le problème. – jheddings

+0

Vous autorisez un espace dans la regex. – Paparazzi

+0

@Blam pourriez-vous s'il vous plaît être plus précis? –

Répondre

0

Vous avez un espace supplémentaire dans votre regex après la plage de nombres, mais cela ne devrait pas être trop d'une problème. De la façon dont il est écrit, votre regex correspondra à n'importe quelle séquence de nombres ou d'espaces.

Ceci correspond une chaîne entière seulement:

if (Regex.IsMatch(value, "^[0-9]+$")) 
... 

Je ne sais pas si cela est un problème basé sur l'initialisation de value, mais il ne sera certainement pas correspondre à une chaîne entière.

Si vous devez tenir compte des valeurs décimales dans votre regex:

if (Regex.IsMatch(value, "^[0-9]+(\.[0-9]+)?$")) 
... 
+0

J'ai oublié de mentionner. Avant, j'avais toujours ex: programme int = 5 m'a donné une chaîne de 5.00000.Mon code fonctionne et il convertit la chaîne à 5, mais pour cet autre type, il doesnt. –

0

Votre question ne décrit pas clairement d'où vient value.

Je suppose que vous devez utiliser l'une des méthodes surchargées .ToString() pour convertir le type de données d'origine en value.
Ensuite, pour convertir ValueBox.Text retour utiliser Convert.ToDouble() (ou la méthode appropriée pour le type de sortie souhaité). Vous pouvez également utiliser Double.TryParse() (ou le type approprié) que je préfère.

Références: Double.ToString Method (String)
Standard Numeric Format Strings
Custom Numeric Format Strings
Double.TryParse Method (String, Double%)

Questions connexes