IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Decimal parse erreur format


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Decimal parse erreur format
    Bonjour, j'ai deux variable de type int, je veux les mettre dans une seule variable de decimale de facon qu'elle soit égale à value1,value2

    Nom : Capture.JPG
Affichages : 376
Taille : 11,0 Ko

    j'ai essayé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decimal valstr = Decimal.Parse($"{sixDof_Data[0].InputRegisters[0]},{sixDof_Data[0].InputRegisters[1]}");
    sixDof_Data[0].InputRegisters[0] = value 1
    sixDof_Data[0].InputRegisters[1] = value 2

    mais il sort cet erreur : Le format de la chaîne d'entrée est incorrect. sachant que j'ai essaye d'échanger le virgule par un point, mais ça a pas marché

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pourquoi avoir ouvert une nouvelle discussion ? Autant continuer sur celle que tu avais ouverte pour la même question ("fusion" de 2 valeurs en une seule).
    Sinon comme je l'avais indiqué dans l'autre discussion, l'aide en ligne de decimal.Parse() indique comment gérer les formats (pour les séparateurs de décimal, de millier…).
    Et tu as aussi la solution de StringBuilder… qui ne pose pas de problème de format de chaine.

    Tatayo.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Pourquoi avoir ouvert une nouvelle discussion ? Autant continuer sur celle que tu avais ouverte pour la même question ("fusion" de 2 valeurs en une seule).
    Sinon comme je l'avais indiqué dans l'autre discussion, l'aide en ligne de decimal.Parse() indique comment gérer les formats (pour les séparateurs de décimal, de millier…).
    Et tu as aussi la solution de StringBuilder… qui ne pose pas de problème de format de chaine.

    Tatayo.

    ça a pas marcher la solution de StringBuilder ? dois je faire une conversation decimal.parse dans la 38 ? puisque variable elle est de type int
    Nom : Capture2.JPG
Affichages : 483
Taille : 103,5 Ko

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Je dirai que Math.Floor renvoie un double, et que tu veux affecter la valeur à un decimal.
    Il faut donc faire une conversion explicite. C'est ce qu'indique le message d'erreur.

    Tatayo.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Je dirai que Math.Floor renvoie un double, et que tu veux affecter la valeur à un decimal.
    Il faut donc faire une conversion explicite. C'est ce qu'indique le message d'erreur.

    Tatayo.
    Nom : Capture.JPG
Affichages : 447
Taille : 113,9 Ko
    et la pour math.pow, la convertion est impossible :/

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    C'est tout de même étonnant, j'avais testé le code de StringBuilder, sans aucune erreur (à part la division par 0...).
    Sinon tu ne peux pas mettre le code plutôt qu'une capture d'écran, c'est plus simple pour le copier/coller…

    Tatayo.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tatayo Voir le message
    C'est tout de même étonnant, j'avais testé le code de StringBuilder, sans aucune erreur (à part la division par 0...).
    Sinon tu ne peux pas mettre le code plutôt qu'une capture d'écran, c'est plus simple pour le copier/coller…

    Tatayo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                    string pitch = (sixDof_Data[0].InputRegisters[1]).ToString();
                    decimal valstr = Decimal.Parse($"{sixDof_Data[0].InputRegisters[0]},{sixDof_Data[0].InputRegisters[1]}");
                    decimal nbbdigits = Convert.ToDecimal(Math.Floor(Math.Log10(sixDof_Data[0].InputRegisters[1]) + 1));
                    decimal valstr2 = sixDof_Data[0].InputRegisters[0] + sixDof_Data[0].InputRegisters[1] / Math.Pow(10, nbbdigits - 1);
                    decimal* pval_real = &valstr;
                    decimal val_real = *pval_real;
                    Console.WriteLine(sixDof_Data[0].Ip);
                    Console.WriteLine(sixDof_Data[0].InputRegisters[1]);
                    Console.WriteLine(sixDof_Data[0].InputRegisters[0]);
                    Console.WriteLine("pitch_col2 =" + valstr);
                   // Console.WriteLine("pitch_col2_Real =" + val_real);
     
                    Console.Write("Press any key to continue . . . ");
                    Console.ReadKey(true);

    la déclaration du tableau InputRegisters dans une autre classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            public string Ip;
            public int[] InputRegisters;
            public bool[] Coils;

  8. #8
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    La doc : public static double Pow (double x, double y)

    Ton code : decimal nbbdigits

    Le message d'erreur :

    conversion impossible de 'decimal' en 'double'
    Je vois pas ce qu'il te faut de plus pour comprendre le problème

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Alors, si je reprends le code de StringBuilder, que j'ai juste un peu modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int a = -12452;
    int b = 22314;
     
    // Conversion des valeurs d'entrée dans le type de destination pour éviter des soucis d'arrondis
    decimal af = a;
    decimal bf = b;
     
    // Calcul du nombre de décimales de b (ou savoir de combien le décaler)
    double nbdigits = Math.Floor(Math.Log10(b) + 1);
    // Le premier test pour gérer les valeurs négatives, et le deuxième pour éviter une division par 0 si la partie négative vaut 0
    decimal c = a + (a < 0 ? -1 : 1) * (b == 0 ? 0 : b / (decimal)Math.Pow(10, nbdigits - 1));
    Aucun problème de conversion ici, tout ce passe bien.

    Tatayo.

Discussions similaires

  1. Erreur format Date dans MySql
    Par stefan73 dans le forum JDBC
    Réponses: 7
    Dernier message: 04/07/2011, 18h22
  2. Réponses: 12
    Dernier message: 20/03/2010, 00h52
  3. code d'erreur format date
    Par laurent.w dans le forum Access
    Réponses: 1
    Dernier message: 05/01/2007, 17h15
  4. Réponses: 3
    Dernier message: 01/10/2006, 13h04
  5. [validation]Erreur format texte depuis BDD
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2006, 19h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo