Afrunding af tal 25,50,75,100 Hvordan??(skal bruges til kasseapparat)

Tags:    visual-basic

Jeg har nu lavet et kasse apparart i VB2005
Alt virker men skal lieg have en sidste ting på plads.

Alle tal er i Double variabler..

Nu har jeg problemet,at den altid gerne måtte afrundet tallet så der altid også var 2 decimaler på tallene.
Og samtiddig afrunde dem, så der kun ville stå, eksempel: 10,25 - 12,50 - 15,75 - 20,00

Lige nu kan den finde på at skrive 12,125 eller 7,5 Hvilket jo ikke
ser pænt ud...

Hilsen jan



7 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
I VB brugte man i gamle date Format, måske kan du stadig bruge den i VB2005?

Format(din_variabel_her, "###.00")

Hvis din_variabel_her indeholder 10,5 bliver det til 10,50.
Indeholder din_variabel_her 10 bliver det til 10,00.
Du ser sikkert mønsteret.

Med hensyn til afrunding til hele 25 ører, så viser dagens kasseaparater da hele beløbet i ører, ikke?
Jeg ser ihvertfald ofte beløb i stil med xxx,95 når jeg handler.

Håber det hjælper.



Hvis du opererer med penge, bør du bruge det, der hedder Banker's Rounding (http://en.wikipedia.org/wiki/Rounding#Round-to-even_method).

Fordelen ved denne metode er, at afrundingerne får en pæn "fordeling" som gør, at totalen af afrundede tal som regel bliver lig den afrundede total.

Math.Round i .net understøtter Banker's Rounding. Som parameter skal du bruge MidpointRounding.ToEven. CInt i VB6 benytter i øvrigt også Banker's Rounding.

I øvrigt er det nok ikke en god idé at bruge double som repræsentation af penge ;)

Mvh. Jakob.



kan man ikke bare ligge 0.125 til tallet modulere det med 0.25 og gange det du får med 0.25?



I VB brugte man i gamle date Format, måske kan du stadig bruge den i VB2005?

Format(din_variabel_her, "###.00")

Hvis din_variabel_her indeholder 10,5 bliver det til 10,50.
Indeholder din_variabel_her 10 bliver det til 10,00.
Du ser sikkert mønsteret.

Med hensyn til afrunding til hele 25 ører, så viser dagens kasseaparater da hele beløbet i ører, ikke?
Jeg ser ihvertfald ofte beløb i stil med xxx,95 når jeg handler.

Håber det hjælper.


Der er en fejl i Format(din_variabel_her, "###.00")
Det virker ikke i praktis...




I VB brugte man i gamle date Format, måske kan du stadig bruge den i VB2005?

Format(din_variabel_her, "###.00")

Hvis din_variabel_her indeholder 10,5 bliver det til 10,50.
Indeholder din_variabel_her 10 bliver det til 10,00.
Du ser sikkert mønsteret.

Med hensyn til afrunding til hele 25 ører, så viser dagens kasseaparater da hele beløbet i ører, ikke?
Jeg ser ihvertfald ofte beløb i stil med xxx,95 når jeg handler.

Håber det hjælper.


Der er en fejl i Format(din_variabel_her, "###.00")
Det virker ikke i praktis...


System.Math.Round retuner eg. 1.4>1 1.5>2 1.6>2 med 0 prections

System.Math.Ceiling retuner eg. 1.4>2 1.5>2 1.6>2 med 0 prections

System.Math.Floor retuner eg. 1.4>1 1.5>1 1.6>1 med 0 prections

-Thomas



Indlæg senest redigeret d. 10.01.2007 19:48 af Bruger #65
Hej,

Prøv at se på følgende eksempel:
Fold kodeboks ind/udKode 


Jeg har med vilje ikke kommenteret og forklaret det for at det skal være lidt sværere at forstå - og dermed lærer du lidt mere ved at bruge tid på at forstå det :-) Men skriv endelig, hvis du ikke er helt med på det.



Hvis du opererer med penge, bør du bruge det, der
I øvrigt er det nok ikke en god idé at bruge double som repræsentation af penge ;)

Mvh. Jakob.


Jeg er helt enig. Det er derfor man har en variabeltype der hedder Currency. ;)



t