Avatar billede dl Nybegynder
17. februar 2009 - 11:09 Der er 10 kommentarer og
1 løsning

Pasning af float / afrundning

Jeg står i det problem at jeg henter et udtræk op fra min database (MSSQL)

I dette udtræk har jeg en sum 342,345467 float.

Jeg kunne godt tænke mig at afrunde tallet , til et to decimal tal.

altså 342,35 ,, da det var noget med valuta at gøre.

Mit problem er at jeg har forsøt Math.round,  float.parse,  mv, og c# er bare så ligeglade.  :S

hvordan arbejde jeg med tal og parse den rigtig ?

// dl
Avatar billede erikjacobsen Ekspert
17. februar 2009 - 11:25 #1
Hvad er din kode, hvor du prøver?
Avatar billede dl Nybegynder
17. februar 2009 - 11:48 #2
public String GenPaymentReference()
        {
            Boolean bPayRef = false;
            int no = 0;

            DataTable dt = new DataTable();

            for (int i = 0; i < 10; i++)
            {
                Random random = new Random(10);
                no = random.Next(0,999999);
                dt = new ExpandITDK.Data.Sql.SqlConn().GetDataTableFromSql("SELECT * FROM AccountPaymentTemp WHERE PaymentReference = " + no + " ");
                if (dt.Rows.Count == 0)
                {
                    dt = new ExpandITDK.Data.Sql.SqlConn().GetDataTableFromSql("SELECT * FROM AccountPayment WHERE PaymentReference = " + no + " ");
                    if (dt.Rows.Count == 0)
                    {
                        bPayRef = true;
                        break;
                    }
                }
            }

            // Return the value or the error message "PayRefErr"
            if (bPayRef)
            {
                return no.ToString();
            }
            else
            {
                throw new Exception("Unable to create a new payment reference. Please contact the site administrator.");
            }
        }



vi løste det, med  en toString()...

Men det kan da ikke være rigtig at vi ikke kan returne en float, med 2 decimaler, uden at den selv fylder 6 decimaler mere på.

Synes det er noget mærkelig.
Avatar billede erikjacobsen Ekspert
17. februar 2009 - 11:59 #3
En float kan ikke altid repræsenteres præcist med 2 decimaler. 2½ kan, men 2 + 1/3 kan ikke. Man plejer derfor at runde af i udskriften. Kig på String.Format - vistnok.
Avatar billede dl Nybegynder
17. februar 2009 - 12:03 #4
K, hvordan håndtere man så currency  :) 

50,50 kr.
50,25 kr.
50,23 kr.

?
Avatar billede erikjacobsen Ekspert
17. februar 2009 - 12:53 #5
Du definerer en decimal i databasen, med det antal pladser, der skal være efter kommaet. Typisk 2. Måske 0 i Zimbabwe ;)
Avatar billede arne_v Ekspert
17. februar 2009 - 15:11 #6
Jeps.

DECIMAL(14,2) i databasen og decimal i C#.

Aldrig FLOAT og float til penge.
Avatar billede dl Nybegynder
18. februar 2009 - 11:22 #7
Det giver go enlig god mening.

Vil du give et svar.

// dennis
Avatar billede arne_v Ekspert
22. februar 2009 - 03:08 #8
Det er vel den ikke-point-samlende som besvarede dit spørgsmål.
Avatar billede dl Nybegynder
22. februar 2009 - 20:23 #9
erikjacobsen besvar mit spørgsmål :) og han må godt give et svar.
Om han så samler på point eller ej.

//dl
Avatar billede erikjacobsen Ekspert
22. februar 2009 - 20:40 #10
Ingen point til mig, tak.
Avatar billede dl Nybegynder
23. februar 2009 - 09:02 #11
K, arne_v ... Siden du har svaret på noget database spørgsmål, vil du så have pointne, ellers vil jeg selv tage dem, så jeg kan få lukket sp.

//dl
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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