none
problème de calcul avec fix() RRS feed

  • Question

  • Bonjour,
    je rencontre un problème avec un calcul apparemment basique...
    ma base est une base access.
    j'ai un champ de type numérique réel double
    dans vb express 2008, je fais un datatable avec une requête
    SELECT simu, fix(simu), simu-fix(simu)
    FROM Pagecdv where simu is not null and simu <>0 and nmrcarnet=1
    dans access cette requete me ramène par exemple pour une valeur 1.15 les valeurs suivantes 1.15, 1 et 0.15
    lorsque je lance la requête dans VB j'ai les valeurs suivantes 1.15, 1 et 0.149999999999..1
    Auriez vous une explication et/ou une solution pour avoir les valeurs correctes comme dans access ?
    Merci d'avance

    Fred
    jeudi 29 avril 2010 05:52

Réponses

  • Bonjour,

    Problème de précision avec les Single ou les Double de .NET, essayez d'utiliser dans votre DataTable le type Decimal.

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    jeudi 29 avril 2010 06:34
    Modérateur
  • Merci pour la réponse

    finalement, j'ai opté pour cette solution même si ce n'est pas top ou très académique

    sachant que je n'ai que 2 décimales j'ai fais cette requête

    SELECT        SIMU, fix(SIMU) AS Expr1, cint(iif(isnull(SIMU), 0, SIMU) * 100) - 100 * fix(iif(isnull(SIMU), 0, SIMU)) AS Expr2
    FROM            Pagecdv
    WHERE        (SIMU IS NOT NULL) AND (SIMU <> 0) AND (NMRCARNET = 1)

    qui me donne bien

    1.15, 1 et 15

     

    A+

    Fred

    • Marqué comme réponse Fredflyer samedi 1 mai 2010 13:52
    samedi 1 mai 2010 13:52

Toutes les réponses

  • Bonjour,

    Problème de précision avec les Single ou les Double de .NET, essayez d'utiliser dans votre DataTable le type Decimal.

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    jeudi 29 avril 2010 06:34
    Modérateur
  • Merci pour la réponse

    finalement, j'ai opté pour cette solution même si ce n'est pas top ou très académique

    sachant que je n'ai que 2 décimales j'ai fais cette requête

    SELECT        SIMU, fix(SIMU) AS Expr1, cint(iif(isnull(SIMU), 0, SIMU) * 100) - 100 * fix(iif(isnull(SIMU), 0, SIMU)) AS Expr2
    FROM            Pagecdv
    WHERE        (SIMU IS NOT NULL) AND (SIMU <> 0) AND (NMRCARNET = 1)

    qui me donne bien

    1.15, 1 et 15

     

    A+

    Fred

    • Marqué comme réponse Fredflyer samedi 1 mai 2010 13:52
    samedi 1 mai 2010 13:52