none
Empêcher c# d'arrondir un decimal RRS feed

  • Question

  • Bonjour à tous,

    j'ai dans ma base de données Sql Server 2 champs définit en décimal(18,2).

    Dans mon Windows Form c#, je passe à ma procédure stockées mes 2 décimaux.

    Lorsque je mets des break point à ce niveau, je passe bien des décimaux. Dans Sql, mes décimaux sont arrondis à la valeur supérieur.

    j'ai testé ma requête dans Sql server avec des décimaux et là pas de problème, ils ne sont pas arrondis.

    J'ai essayé plusieurs solutions dont CultureInfo.CreateSpecificCulture("en-EN") et les fonction Math mais rien n'y fait.

    Merci

    lundi 21 janvier 2013 18:58

Réponses

  • j'ai trouvé le problème te répondant. Dans ma procédure stockée j'avais mis mes prix en decimal et non en decimal(18,2) ce qui explique le fait qu'il arrondisse au supérieur.

    Merci pour ton aide.

     
    • Marqué comme réponse paintbox00 mardi 22 janvier 2013 13:23
    mardi 22 janvier 2013 13:23

Toutes les réponses

  • je pense que c'est à cause du type de ta colonne, essaye de la modifier en flottant et ça passera:

    alter table MaTable alter column MaColonne float


     
    mardi 22 janvier 2013 08:31
  • Bonjour,

    merci pour ton aide, mais cela ne change rien. 

    En plus, le type décimal est fait pour des valeurs monétaires non?

    voir ici

    mardi 22 janvier 2013 09:51
  • pour le type monétaires il ya le type money & smallmoney
    mardi 22 janvier 2013 11:16
  • J'ai essayé de tester un exemple:

    dans ma procédure:

     ALTER PROCEDURE [dbo].[spExample]
          @parameter1   decimal(10,2)     
        AS
        BEGIN
        INSERT INTO tesTtab(TestCol) Values (@parameter1);
        RETURN
        END
    

    dans mon code C#:

    myConnection.Open();
    using (var command = new SqlCommand("spExample", myConnection)
    {
    CommandType = CommandType.StoredProcedure
    })
    {
    command.Parameters.Add(
    new SqlParameter("@parameter1", 11.47874));
    command.ExecuteNonQuery();
    myConnection.Close();
    }

    Bref si j'envoi 11.4787 ==> je vais obtenir 11.48 ce qui est logique

    Si j'envoi 11.47 ==> je vais obtenir 11.47

    Qelle est le type de paramètre en C# que tu passe à la base ?

    mardi 22 janvier 2013 11:46
  • j'ai définit tous en décimal dans mon code c# et dans Sql Server (table et procédure stockée)
    mardi 22 janvier 2013 13:13
  • j'ai trouvé le problème te répondant. Dans ma procédure stockée j'avais mis mes prix en decimal et non en decimal(18,2) ce qui explique le fait qu'il arrondisse au supérieur.

    Merci pour ton aide.

     
    • Marqué comme réponse paintbox00 mardi 22 janvier 2013 13:23
    mardi 22 janvier 2013 13:23