12. april 2005 - 11:13Der er
61 kommentarer og 1 løsning
Afrunding af decimaler
Hejsa,
Jeg har et datagrid, hvortil jeg med en stored procedure udtrækker nogle tal til. Disse kommer ud med 4 decimaler - f.eeks.: 99,5000. Hvordan får jeg dette til kun at være 2 decimaler?
Det læste jeg godt noget om et andet sted, men er ikke klar over, hvor jeg skal skrive det henne, for jeg indlæser jo tallene direkte til mit datagrid.
Når jeg gør det, går det op i lort. Så virker en af mine andre funktioner ikke, og den kalder kolonnen 'Belob' for 'Column1' - og der er stadig 4 decimaler.
jakub> Hvad nu hvis det er et mega gammelt system hun har overtaget arbejdet på, og ikke kan ændre de ting som ligger der i forvejen? Men skal selvfølgelige ikke kunne udtale mig om situationen, men vil tro hun havde prøvet andet inden hun spørger her :)
Kom med kode, eller kolonne navne, så kigger vi lige på det :) Tror vi skal have gang i noget AS her... F.eks Round(Kolonne, 2) AS Belob, så kan det være din funktion kan få fat i den....
Når man bruger en aggreat funktion i SQL så kommer der ikke noget kolonne navn på den kolonne man arbejder med.
Jeg har et lille forslag.... Men det er noget klyt, men måske virker det :)
SELECT Bestilling, Dato, Konto, Bruger, CAST(ROUND(Belob,2) AS DECIMAL(20,2)) as Belob FROM Indbetalinger where Konto = @parmSalgsted and Bestilling >= @parmStartnr
Line> Det var så lidt.... Må jeg stille dig et (personligt) spørgsmål? De opgaver du spørger om her inde, er det noget fritids noget, eller er det en del af dit job? Er bare lidt nysgerrig, håber det er okay...
Jeg er lærling som Datafagtekniker, og laver pt ikke andet end at rode med og lære C# og MSSQL, så det hedder 8 timer om dagen med C#.
Omkring dit problem med at den kun tager et decimal, så må vi lige se på hvordan den opfatter det som står i dit datagrid. Kan du ikke udlæse dt.Rows[i]["Belob"] til en string variabel, og se hvordan den variabel ser ud, inden du conventere den?
DataTable dt = ds.Tables[0]; double sum = 0.00; string Test = ""; for (int i=0;i<dt.Rows.Count;i++) { Test = Convert.ToString(dt.Rows[i]["Belob"]); sum += Convert.ToDouble(Test); }
jakum> Det lyder som et godt argument hvorfor den kun skulle skrive 2.1 f.eks, det havde min hjerne lige overset som mulighed, men igen, jeg skal have eksempler at kigge på. Min teoretiske viden er slet ikke god nok til at kunne svare uden at afprøve ting.... :-)
Jeg har lige kørt dét, du skrev, og det gav det samme som før.
Men jeg tror, du har ret i det, du skriver.
Men jo, jeg udskriver sum her: Label4.Text = sum.ToString() + " kroner";, og der er kun en decimal - pånær hvis det giver feks 1000,75, så tager den det med - men ikke, hvis det er et 0.
nej... Jeg tror jeg har det... I samme sekund du laver en double om til en tekst, ved hjælp af .ToString vil den bruge de regionale indstillinger til formatere tallet med. I dk bruger vi komma til at dele mellem hel tal og decimaler. Jakums leder kun efter punktum, som er amerikansk....
Jeg tror du skal erstatte hans punktumer med komma'er....
Ja.. Men det første tager ikke højde for om dit slet ikke har decimaler på.... :) Det gør det sidste, så først tjekker den om der er decimaler, og så tjekker den om der er 2 decimaler.... :)
Må heller ligge point lidt til jakum, han gav mig grund ideen....
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.