26. november 2003 - 08:23Der er
17 kommentarer og 1 løsning
datatype forvirring
Hej folks..
Jeg har et hurtigt spørgsmål.. Situationen er denne: Jeg har en asp:textbox hvor i jeg indtaster "15,6", altså et decimal tal. Jeg skal nu ha hevet denne indformation ud, og lagt i en float, og gemt i ms sql db. Det jeg gør er: float tal = Convert.ToSingle(textbox.Text);
Når jeg gemmer informationen bliver det gemt som 15,6000003814697
Hvorfor denne afrundingsfejl?
Hvad gør jeg galt, min float i programmet er tilsyneladende helt fin... Er det fordi databasens float og c#'s float er forskellige?
Det sjove er at f.eks 20,5 går fint igennem... ;-S
jo... men det gør det jo ikke rigtigt... Det kan da ikke passe at man skal smide alt væk efter kommaet... "tænkt situation" hvis så nogle gerne vil gemme 134,4525626 som så sikker bliver til 124,4525626003543 Hvad gør man så...
Jeg vil gerne ha en løsning på hvordan man hiver tekst ud, konverterer til decimal tal i koden, og gemmer som samme tal.
Og det kan godt lade sig gøre... Ellers havde de ikke turde udgive c#... ;-)
Og det er noget som alle sprog har fordi det er sådan floating point tal fungerer.
Derfor: - prøv double fordi ganske vist har den præcis samme problem men den har dobbelt så mange cifres præcision - når du udskriver så udskriv formateret med nogle færre cifre - hvis det er beløb vi snakker om så glem alt om float & double
Jeg har vel heller ikke bruget mere end et par cifres præcision ved at skrive 15,6... eller har jeg misforstået noget helt.. :-)
Jeg kan sagtens nøjes med at "klippe" resten af... Men det irriterer mig at den ikke kan gemme det ordentligt, og at jeg ikke ved hvorfor.. Men det kan sagtens ha noget med præcisionen af db'ens float og c#'s float - Er ikke sikkert de er helt ens (og .net's Single for den sags skyld)
Det må jeg lige undersøge en anden dag... Har lidt travlt idag...
-> Arne : Hvad mener du med glem float og double ved beløb... Hvad skal jeg så gøre? Kræve to decimaler og gemme som int? og så bare sætte komma selv eller hvad?
Der er både en der hedder float og en der hedder decimal. Begge steder. Men det vil sige at min eneste option er at afrunde når jeg skal vise det.
Men jeg forstår ikke helt logikken i det med præcisionen lige nu... Hvis jeg gemmer et tal som 15,6 (et helt godt eksempel ik.. hehe), så er der da ingen grund til at begynde at afrunde og gøre det lidt skævt..
Men det er nok noget jeg skal læse om en anden gang.. .
Du skriver at det er en fixed point... Når jeg nu bruger float datatypen begge steder.. Lyder det da ikke som fixed.. men mere som float.. ;-)
Men det kan selvfølgelig være min Convert.ToSingle("15,6") der er fixed point.. Det må jeg lige tjekke..
Inde i mit hoved har jeg svært ved at forestille mig at der overhovedet skulle være en forskel, hvor man bruger den samme datatype både i databasen OG i applikationen. Hvis du kan se en forskel på 0,0000003814697, så er det du gemmer vel heller ikke en float i databasen?
cool... Jeg lever med det... ;-) Og rykker alt efter 2. decimal af... måske 1.. hehe
Synes godt om
Ny brugerNybegynder
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.