Avatar billede Obbi Nybegynder
08. juni 2011 - 13:14 Der er 22 kommentarer og
1 løsning

Table float?

Hej. er ved og lave en hjemmeside. Men og har valgt at pris i min datatabel i min database skal være typen "float" . Mit problem er når jeg går ind i mit CMS system og gemmer feks. 12,99.. gemmer den det som 12,9834234234.

i min addIT.aspx bruger jeg denne command til og gemme det i min DB

Prop._Pris = float.Parse(TxtPris.Text);

og SQL stringen er

    public void AddVare(VarePro pro)
    {
        string strSQL;

        strSQL = "insert into tblITshop (fldOverskirft, fldBillede, fldPris, fldBeskrivelse, fldKategori, fldSortering)";
        strSQL += " Values(@Overskirft, @Billede, @Pris, @Beskrivelse, @Kategori, @Sortering)";

        SqlCommand objCMD = new SqlCommand(strSQL);

        objCMD.Parameters.Add("Overskirft", SqlDbType.VarChar).Value = pro._Overskirft;
        objCMD.Parameters.Add("Billede", SqlDbType.VarChar).Value = pro._Billede;
        objCMD.Parameters.Add("Beskrivelse", SqlDbType.VarChar).Value = pro._Beskrivelse;
        objCMD.Parameters.Add("Pris", SqlDbType.Float).Value = pro._Pris;
        objCMD.Parameters.Add("Kategori", SqlDbType.Int).Value = pro._Kategori;
        objCMD.Parameters.Add("Sortering", SqlDbType.Int).Value = pro._Sortering;

        objData.ModefyData(objCMD, _Con);
    }

Men når jeg gemmer som jeg fortalte i toppen, gemmer den ikke 12,99 . men 12,9843432432. og det gælder alle tal jeg skriver det sidste tal efter "," bliver sat 1 ned og en masse af andre tal.

Nogen ide om hvad det kan være?
Avatar billede martinlind Nybegynder
08. juni 2011 - 16:06 #1
Det skulle vel ikke være en MS db du bruger :-)

Skulle engang sende en ip-adr. via msn ..... det kan man ikke den bliver lavet om ?!?!

Så prøv en RIGTIG db, Firebird / mySQL eller lign.
Avatar billede Obbi Nybegynder
08. juni 2011 - 16:12 #2
Bruger den database der bliver lavet local i Visual Studio
Avatar billede martinlind Nybegynder
08. juni 2011 - 16:19 #3
skal ikke kunne sige det :-)
Det er bare et sygt MS problem og side med... hvad helvelde er logigen i at tælle et tal en ned når man gemmer det... ikk' ?!? fulstændig lige som at man bare ændre en ip i msn UDEN at gøre opmærksom på det ...... MS sucks nogle gange
Avatar billede Obbi Nybegynder
08. juni 2011 - 17:22 #4
Okay prøvet det du siger. virker ikke :P den gør det stadig :P
Avatar billede keysersoze Guru
08. juni 2011 - 17:36 #5
Benyt en decimal, fx decimal(14,2), i stedet. Tag et kig på "Goldberg floating point" hvis det er interessant at vide hvorfor float opfører sig som den gør.

Det er en MS SQL Express Visual Studio som udgangspunkt opretter.
Avatar billede Obbi Nybegynder
08. juni 2011 - 17:38 #6
har jeg også prøvet altså feks. 900,9kr. men gør det stadig :S
Avatar billede Obbi Nybegynder
08. juni 2011 - 17:39 #7
Nu kan det godt være jeg spørg dumt. men hvad er ""Goldberg floating point" ?
Avatar billede keysersoze Guru
08. juni 2011 - 18:10 #8
hvis du har rettet til en decimal på tabellen har du vel også husket at tilrette koden?

Google det begreb - så kommer der nogle artikler op om det.
Avatar billede Obbi Nybegynder
08. juni 2011 - 19:44 #9
lige meget om der er  1 elelr 2 decimaler. stadig samme
Avatar billede keysersoze Guru
08. juni 2011 - 19:47 #10
Prøv at kom med din kode.
Avatar billede Obbi Nybegynder
08. juni 2011 - 19:59 #11
litListe.Text += Pris: " + row["fldPris"] + "kr.";
Avatar billede keysersoze Guru
08. juni 2011 - 20:04 #12
insert-koden.
Avatar billede Obbi Nybegynder
08. juni 2011 - 20:05 #13
er total lost nu :P mener du ?
Avatar billede keysersoze Guru
08. juni 2011 - 20:36 #14
kom med koden hvor du indsætter data i databasen.
Avatar billede Obbi Nybegynder
08. juni 2011 - 20:41 #15
fldPris Float

det det
Avatar billede keysersoze Guru
08. juni 2011 - 20:52 #16
hvis du skifter til en decimal i databasen bør du også arbejde med decimal-datatypen i din .NET kode.

Det jeg primært var ude efter var den opdaterede version af den kode du postede i dit spørgsmål, for her skal sqqldbtype selvfølgelig også tilpasses.
Avatar billede Obbi Nybegynder
08. juni 2011 - 21:02 #17
nårrr jamne har ingen updated kode. ved ikke hvad fejlen er jo
Avatar billede keysersoze Guru
08. juni 2011 - 21:24 #18
alt float skal skiftes til den nye datatype, decimal, se fx denne linje;

objCMD.Parameters.Add("Pris", SqlDbType.Float).Value = pro._Pris
Avatar billede Obbi Nybegynder
08. juni 2011 - 22:16 #19
det er  jo det jeg har skrevet oppe i toppen?
Avatar billede keysersoze Guru
08. juni 2011 - 22:54 #20
ja, og det jeg forsøger at sige er, at du ikke skal arbejde med float når kolonne datatypen (måske?) er skiftet til decimal. Du skal altså skifte SqlDbType.Float ud med den tilsvarende til decimal. Samtidig skal datatypen på din pris-property på dit varepro-objekt ændres til decimal. Så længe du arbejder med float og ikke decimal et eller flere steder i din applikation vil du have problemer.
Avatar billede Obbi Nybegynder
08. juni 2011 - 22:59 #21
og hvad er det tilsvarende?
Avatar billede keysersoze Guru
09. juni 2011 - 07:53 #22
Decimal
Avatar billede keysersoze Guru
09. juni 2011 - 07:54 #23
Det burde også næsten være til at gætte sig til hvis du brugte intellisense i dit udviklingsprogram.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester