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

Accès aux données Discussion :

[Oracle/ASP.NET/C#] Format de nb float/Single


Sujet :

Accès aux données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Par défaut [Oracle/ASP.NET/C#] Format de nb float/Single
    Bonjour,

    Voila j'ai un texbox (placé dans le footer d'un datagrid), je tape une valeur dedans, par exemple 1.2, et je valide pour insérer la donnée.
    ...mais au lieu que ce soit 1.2 qui aille en base (Oracle), c'est 1.20000004768372, des fois je tape 5.5, il me mets 5.50 ...et 5.55 un truc du genre 5.5500000192 ...

    Je me doute bien que ca doit un problème de formats et d'arrondis ...mais j'ai tout essayé et je comprends pas !

    Voila ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public static string AddLine(Single month){
    	OracleCommand _command = new OracleCommand();
    	_command.Connection = _connection;
    	_command.CommandText = "INSERT INTO kpi_main_page(month) values(:month)";
    	OracleParameter _param;
    	_param = _command.Parameters.Add(new OracleParameter(":month",OracleType.Float,22));
    	_param.Value = month;
    	try
    	{
    		_command.ExecuteNonQuery();
    		return "ok";
    	}
    	catch (Exception _exception)
    	{
    		return _exception.Message;
    	}
    	finally
    	{
    		_command.Dispose();
    		_connection.Close();
    		_connection.Dispose();
    	}
    }
    En base (Oracle 8i), mon chamsp Month est un Float, longueur 22

    Le type Single est il ce qu'il se fait de plus proche du float ?
    (j'ai tenté d'utiliser pour mon paremetre month un float mais je n'arrive pas à convertir monTexBox.Text en float, j'ai juste les méthodes System.Convert.ToSingle/ToDecimal/ToDouble ...)


    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    As-tu essayer d'envoyer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert.ToSingle(monTexBox.Text.PadRight(22,'0'));
    bien sûr il faudrait s'assurer que le nombre saisie est bien avec une virgule

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Par défaut
    Bah la je suis plus au boulot donc je peux plus rien essayer

    ...mais ce qui était étonnant c'est que ce que je donne en parametre est correct quand je l'affiche, et meme une fois le parametre rempli, juste avant d'executer la requete, j'ai bien ce que je veux :

    j'affiche dans un alert le résultat récupéré dans le textbox: ok, par ex 1.2
    je remplis mon _param
    j'affiche le _param.value dans un alert : ok, 1.2

    je lance la requete ...et la berk 1.20000156456 grrr lol

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    comme tu as defini une precision, je me demande s'il ne faut pas imposer cette precision à la valeur envoyé pour eviter ce genre de surprise du system
    tu me diras Lundi

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Par défaut
    ouais je viendrai lundi vous embeter un peu car je suis pessimiste j'ai rien trouvé meme sur les nombreux cours ADO.NET mis a disposition ici.

    Voila le seul lien qui est en relation avec mon souci pour le moment:

    http://www.pcreview.co.uk/forums/thread-1297881.php

    Bon week end a tous

  6. #6
    DrQ
    DrQ est déconnecté
    Membre émérite
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Par défaut
    Le problème vient du type utilisé en .NET.

    Pour résoudre ton problème utilise le type decimal. Il est exactement prévu à cet effet.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Par défaut
    Citation Envoyé par DrQ
    Le problème vient du type utilisé en .NET.

    Pour résoudre ton problème utilise le type decimal. Il est exactement prévu à cet effet.
    Même effet si j'utilise un decimal (ou un System.Decimal) en parametre à la place de mon Single

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Par défaut
    Citation Envoyé par neguib
    As-tu essayer d'envoyer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert.ToSingle(monTexBox.Text.PadRight(22,'0'));
    bien sûr il faudrait s'assurer que le nombre saisie est bien avec une virgule
    Ca marche pas non plus

    (...surtout que suivant les regional settings des serveurs des fois tu saisis un chiffre avec un . et des fois avec un , )

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Par défaut
    J'ai trouvé ! 8)

    En fait cela provenait pas de mon code mais du type Oracle. Le Float dans Oracle a un fonctionnement bizarre, je suis passé en NUMBER précision 4 (pour 4 chiffres apres la virgule) et la ca fonctionne super !

    J'ai jamais eu tous ces soucis en SQL Server je comprend pas tout mais bon ca marche maintenant.

    Voila un lien interessant :
    http://<br /> http://asktom.oracle....:6765736862853

    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DAL/EF/Oracle/ASP.NET] Choix technologie
    Par Vinceee38 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 11/10/2012, 11h12
  2. Oracle <-> ASP.NET
    Par GCSX_ dans le forum Accès aux données
    Réponses: 1
    Dernier message: 02/07/2010, 12h17
  3. [Oracle/ASP.Net] Pourquoi je n'arrive pas à charger oci.dll ?
    Par zakaria_jd dans le forum Accès aux données
    Réponses: 1
    Dernier message: 01/08/2006, 12h25
  4. Réponses: 3
    Dernier message: 20/09/2004, 09h00
  5. [CR][ASP.NET] Impression en format "paysage"
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/04/2004, 22h56

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