Avatar billede Gordus Nybegynder
10. marts 2011 - 01:44 Der er 12 kommentarer

Rounding

Hej
Jeg er en begynder i C#
Er i gang med at skrive et lille program
Det starter sådan:

private void button1_Click(object sender, EventArgs e)
        {
            double price, reture;
            int kio;
            price = Convert.ToDouble(textBox1.Text);
            reture = 100.00 - price;
            //reture = Math.Round(reture);
            //reture = Math.Round(reture, MidpointRounding.ToEven);

            label1.Text = Convert.ToString(reture);
            label1.Text = String.Format("Der skal retuneres {0:c}", reture);

Mit næste skridt er at op- eller nedrunde "reture". Mit beløb er skævt, og det er ikke optimalt at bruge Round... Hvis beløbet (har ikke en bestemt værdi) fx. er 1,1 - 1,24 kroner vil gerne nedrunde beløbet til 1 kroner, fra 1,25 til 1,49 skal det være 1,50 kroner, og fra 1,51 skal beløbet oprundes til 2 kroner.

PÅ FORHÅND MANGE TAK....
Avatar billede arne_v Ekspert
10. marts 2011 - 02:09 #1
Gange med 4, afrund til nærmste int og divider så med 4.
Avatar billede arne_v Ekspert
10. marts 2011 - 02:15 #2
Med 2 ikke med 4 (har man afskaffet 25 oeren??).
Avatar billede arne_v Ekspert
10. marts 2011 - 02:16 #3
public static double DKRound(double v)
        {
            return Math.Round(v * 2, MidpointRounding.AwayFromZero)/2;
        }
Avatar billede arne_v Ekspert
10. marts 2011 - 02:17 #4
Eller bedre:

        public static decimal DKRound(decimal v)
        {
            return Math.Round(v * 2, MidpointRounding.AwayFromZero)/2;
        }

da man bør bruge decimal og ikke double til beløb!!
Avatar billede Gordus Nybegynder
10. marts 2011 - 17:29 #5
jep, det er nemlig rigtigt, med 25 øre......
Avatar billede arne_v Ekspert
10. marts 2011 - 17:36 #6
jeg smider et svar så
Avatar billede Gordus Nybegynder
10. marts 2011 - 17:50 #7
Hej igen, tak for dit svar. Men dette giver ikke den rigtige resultat.... Jeg har prøvet dette i går. Hvis jeg trækker 1,25 kroner fra 100 får jeg 99 kroner tilbage, hvilke er rigtigt. Hvis en vare koster 1.30 kroner, skal jeg have 98,50 tilbage, men ifølge mit program får jeg stadig 99 kroner. Dette tager heller ikke højde for 1,50 kroner, selfølge..... Har du et bud til???
Avatar billede arne_v Ekspert
10. marts 2011 - 18:52 #8
Hvordan ser din kode ud nu?
Avatar billede Gordus Nybegynder
11. marts 2011 - 08:26 #9
jamen, du har ikke skrevet til mig..... Koden ser det samme ud som før, jeg arbejder videre på programmet, dog uden den rigtig afrunding....
Avatar billede Gordus Nybegynder
11. marts 2011 - 14:49 #10
det vil være en stor hjælp, hvis du vil give mig et bud på mit problem  Nu har jeg brugt en del tid og har forsøgt at afprøve de forskellige metoder, men uden den forventede resultat.... På forhånd tak
Avatar billede arne_v Ekspert
11. marts 2011 - 20:40 #11
Mit problem er at jeg ikke kan genskabe problemet.

using System;

namespace E
{
    public class Program
    {
        public static decimal DKRound(decimal v)
        {
            return Math.Round(v * 2, MidpointRounding.AwayFromZero)/2;
        }
        public static decimal Change(decimal paid, decimal price)
        {
            return DKRound(paid - price);
        }
        public static void Main(string[] args)
        {
            Console.WriteLine("{0:0.00}", Change(100.00m, 1.25m));
            Console.WriteLine("{0:0.00}", Change(100.00m, 1.30m));
            Console.ReadKey();
        }
    }
}

virker fint her.
Avatar billede arne_v Ekspert
15. april 2011 - 01:58 #12
Gordus?
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