Avatar billede sk-man Nybegynder
19. december 2003 - 14:26 Der er 10 kommentarer og
1 løsning

C# Round

Mår man bruger Math.Round() i C# runder den 0.5 ned og ikke op. Er der en anden funktion som jeg kan bruge i stedet for, hvis jeg vil have rundet op?

Dette resultat giver round:
Math.Round(3.4) = 3
Math.Round(3.5) = 3
Math.Round(3.6) = 4

jeg vil have
Round(3.5) = 4
Avatar billede nielsbrinch Nybegynder
19. december 2003 - 14:29 #1
Du tager din variabel og siger:
double variabel = 3.5;
if (variabel % 1 == 0.5) {
  variabel += 0.1;
}

Det virker lidt hovsa- og amatøragtigt, men det virker hver eneste gang og har ingen bi-effekter.
Avatar billede nielsbrinch Nybegynder
19. december 2003 - 14:31 #2
Ehm - men det kræver vist dine tal kun har ét decimal som vist i dit eksempel.
Avatar billede sk-man Nybegynder
19. december 2003 - 14:36 #3
Yep, det kan jeg ikke være sikker på at de har...
Avatar billede nielsbrinch Nybegynder
19. december 2003 - 14:41 #4
jeg tror faktisk den virker alligevel - prøv!

ved 3.50000001 skal den jo netop runde op som den også gør, ligesom den skal ved 3.49999999 - der er vistnok intet problem, udover det som der varetages ved mit lille eksempel. Jeg tror det virker.
Avatar billede wisen Nybegynder
19. december 2003 - 14:47 #5
... du kan bruge henholdsvis Math.Ceiling og Math.Floor til at runde hendholdsvis op eller ned ...

/Wisen
Avatar billede odegaard Nybegynder
19. december 2003 - 14:54 #6
Math.Floor(3.4) = 3.0
Math.Ceiling(3.4) = 4.0
Avatar billede nielsbrinch Nybegynder
19. december 2003 - 15:06 #7
Den holder ikke - han vil runde af, men den skal bare runde op hvis den er præcis på en halv, ligesom man gør i matematikkens verden. Du kan evt. lave Round halv-manuelt med Floor og Ceiling. if variabel < 3.5 Floor else Ceiling
Avatar billede sk-man Nybegynder
19. december 2003 - 15:18 #8
Hvis jeg bruger string formatering så bliver det rundet op... og det var faktisk det jeg skulle bruge.

String.Format("{0,2:f}",33.555);  //33.56

Tak for hjælpen
Avatar billede arne_v Ekspert
19. december 2003 - 22:23 #9
For en god ordens skyld: Round runder ikke .5 ned - den runder .5 af
til nærmeste lige tal.

using System;

class MainClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine(Math.Round(0.5));
        Console.WriteLine(Math.Round(1.5));
        Console.WriteLine(Math.Round(2.5));
        Console.WriteLine(Math.Round(3.5));
        Console.WriteLine(Math.Round(4.5));
        Console.WriteLine(Math.Round(5.5));
    }
}

outputter:

0
2
2
4
4
6
Avatar billede arne_v Ekspert
19. december 2003 - 22:38 #10
Og hvis man vil have god gammeldages 4/5 afrunding så kan man bruge:

    public static double MyRound(double x)
    {
        return Math.Floor(x + 0.5);
    }
Avatar billede nielsbrinch Nybegynder
19. december 2003 - 22:40 #11
Ihh. Det er smart!
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