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

ASP.NET Discussion :

La virgule ou le point


Sujet :

ASP.NET

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut La virgule ou le point
    Salut

    Je me retrouve confronté à un petit souci de pas grand chose, mais ça gave un peu.
    Je pense que cela doit être dû à mon manque de connaissance profonde et c'est pour ça que je viens chercher de l'aide ici.

    Donc, je prépare une requête SQL avec une donnée en Float.
    et je fais un truc dans ce gout là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim t As Double
    t = 1,35
    dm.ExecuterRequeteSimple("INSERT INTO Table (Temps) VALUES(" & t & ")")
    Et là, il me dit que je n'ai pas le même nombre de valeur que de champ dans ma reuqête.
    Aprés analyse, je me rend compte que le 1.35 est interprété en 1,35.

    Alors ma question est : comment faire pour que le Double arrive bien avec un point et pas une virgule, une fois interprété ?

    Merci pour votre aide.

  2. #2
    Membre confirmé
    Inscrit en
    Novembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 67
    Par défaut
    salut

    un petit REPLACE ?

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut
    Moi j'utiliserai plutot un paramètre pour la requête c'est plus propre que de concatener des valeurs.

    Si tu as par exemple un varchar à ajouter, tu vas aussi t'amuser à doubler les quote !... Dès fois qu'un utilisateur vicieux saisisse "L'abruti" dans le champ pas exemple.

    Illustration avec un unique identifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            Dim cnx As SqlConnection
     
            cnx = New SqlConnection(dsCmde.ConnectionString)
     
            cnx.Open()
                        Dim cmd As New SqlCommand("UPDATE COMMANDE SET ETAT_CMD = 1 WHERE UID_CMD=@ID", cnx)
                        Dim param As Data.SqlClient.SqlParameter
                        param = New Data.SqlClient.SqlParameter("@ID", Data.SqlDbType.VarChar, 36)
                        param.Value = Session("IdCmde")
                        cmd.Parameters.Add(param)
                        cmd.ExecuteNonQuery()

  4. #4
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci à tous les deux pour vos réponses.

    Pour le REPLACE, ça marche trés moyen, vu qu'on parle de Float et de Double, faut passer ensuite par de conversion à n'en plus finir.

    Pour le Paramettre, merci pour ton code, mais j'ai déjà un FrameWork perso qui gère tout ça trés bien.

    Ma question porte bien sur le fait de ne pas utiliser de paramettre. Je m'explique :
    mon FrameWork perso, gère toutes les requêtes SQL dans un fichier de ressources et avec obligation d'utiliser des paramettres.
    Mais j'ai fait un méthode qui gère une requête simple, par le biais d'une chaine. Ce truc là me sert à préparer les requêtes que je vais mettre en dur dans le fichier de ressource, parce que pendant le développement c'est chiant de passer de suite en ressource quand il faut modifier 20 fois la requête, faut recompiler à chaque modification.

    Donc ma question porte bien sur le fait d'utiliser la requête, je dirais, à "l'ancienne", par le montage d'un chaine concaténée. Et surtout de gérer le problème du format du séparateur décimal. Parce que, au delà des requête SQL, il peut se poser d'autre problème et j'aimerais bien comprendre.

    Merci

  5. #5
    Membre éclairé Avatar de Poussy-Puce
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2005
    Messages : 357
    Par défaut
    Et bien... de toutes façons, tu n'auras probablement pas le chois au replace étant donné que 1,35 n'est pas un nombre à virgule mais plutôt une chaîne de caractère pour SQL...

    J'opterais pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim Test As String = "1,35"
    Dim Test2 As Double = Replace(Test, ",", ".")

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Moi je dirais plutot de faire un ToString sur la variable de type double en lui passant une culture de type FR (ou une culture qui a le point comme séparateur décimal).
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  7. #7
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Entièrement d'accord avec EMC51

    Il faut passer par les paramètres qui font ça très bien.

    Imagine un hurluberlu qui change ses symboles décimaux (nombre et monétaire) dans les paramètres options régionales. Par exemple avec une quote simple ou un point virgule...

    exemple si je change ma virgule pour une quote simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = 1.5
    Test = a.ToString ' Test = "1'35"
    Test2 = Replace(Test, ",", ".") ' Test2 = "1'35"


    => Resultat cela ne fonctionne plus

    Oui, je sais, je suis tordu .... mais bon faut tout prévoir ....

  8. #8
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Y a quand même des jours où c'est pas simple de ce faire comprendre, je pensais pourtant avoir été clair :

    JE SAIS TRES BIEN QUE LES PARAMETTRES C'EST MIEUX ET LE REPLACE CA NE MARCHE PAS

    Sinon, vu que maintenant je epnse que tout le monde à compris, SaumonAgile, pourrais tu développer le point sur la culture. Je ne comprnd pas bien comment on passe un truc comme ça ?

    Question subsidiaire : si la machine sur laquelle je développe dispose d'un séparateur décimal en Virgule (option régionale de Windows) est ce que les Double ou autre Sinle vont se coltiner une virgule à chaque fois ?
    A l'inverse, si je modifie mes options régionales en passant au point pour le séparateur décimal, est ce que je m'en sors ?

    Merci SaumonAgile

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    (j'ai lu en diagonale)
    CStr(CDec(t))
    comme ca ca le change en nombre avec le bon format je pense

    sinon tu peux trouver si c'est , ou . qu'il faut dans my.Application.Culture.NumberFormat.NumberDecimalSeparator
    pour si tu veux passer par un replace

    ou encore dnas ta requete tu mets l'instruction sql qui transforme une chaine en double

    ou encore tu réécrés ton "framework" pour qu'il passe par des paramètres ce qui sera beaucoup plus professionnel
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par zooffy
    JE SAIS TRES BIEN QUE LES PARAMETTRES C'EST MIEUX ET LE REPLACE CA NE MARCHE PAS
    J'avais reçu 5/5, je développe un peu pour la culture et le ToString()

    Tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string monDoubleFormate = monDouble.ToString(new CultureInfo("fr-FR"));
    EDIT : Tu peux essayer avec autre chose que fr-FR, je ne sais plus si en France, le séparateur est le point ou la virgule
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  11. #11
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Citation Envoyé par zooffy
    Y a quand même des jours où c'est pas simple de ce faire comprendre, je pensais pourtant avoir été clair :

    JE SAIS TRES BIEN QUE LES PARAMETTRES C'EST MIEUX ET LE REPLACE CA NE MARCHE PAS
    Primo : On se calme
    Secondo : Non, ce n'était pas clair
    Tercio : La réponse peut interesser d'autres personnes que toi (N'allons surtout pas faire penser que la solution que tu as choisi est la meilleure ...)

    Pour ce qui concerne ton problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim Dec_Test As Decimal = 1.35
    Dim Str_Test2 As String
     
    Str_Test2 = Str_Test.ToString.Replace( _
      S.W.F.Application.CurrentCulture.NumberFormat.NumberDecimalSeparator, _ 
    "." _
    )

  12. #12
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci SaumonAgile, je sais trés que tu avais reçu 5/5, toi, au moins, tu prends le temps de lire tous les messages.

    Donc, je vais essayer cette histoire de changement de culture, je ne savais pas qu'on pouvait l'envoyer à la vollée, comme ça.

    Et que personne n'oublie : LES PARAMETTRES C'EST BIEN, MANGEZ EN.

    PS : @sperot51, relis bien mon tu verra que mon FrameWork fais déjà ça. Mais j'ai mis en place des choses plus light pour faire le développement.

Discussions similaires

  1. Remplacer les virgules par des points
    Par vatsyayana dans le forum Excel
    Réponses: 7
    Dernier message: 14/06/2008, 11h13
  2. remplacer virgule par un point
    Par maysa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/10/2007, 12h19
  3. Comment changer des virgules par des points
    Par solorac dans le forum Excel
    Réponses: 2
    Dernier message: 30/07/2007, 10h38
  4. Float : Interpréter la virgule comme un point
    Par nicolas.pied dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 28/12/2006, 14h58
  5. [sql] remplacer une virgule par un point
    Par shiners300 dans le forum Oracle
    Réponses: 1
    Dernier message: 23/12/2005, 19h19

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