/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Afrunding af tal 25,50,75,100 Hvordan??(sk~
Fra : Ingelsen


Dato : 10-01-07 13:15

Jeg har nu lavet et kasse apparat i VB2005
Alt virker men skal lige 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 samtidig 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



 
 
Gert Krabsen (10-01-2007)
Kommentar
Fra : Gert Krabsen


Dato : 10-01-07 14:20

Ingelsen wrote:
> Jeg har nu lavet et kasse apparat i VB2005
> Alt virker men skal lige have en sidste ting på plads.
>
> Alle tal er i Double variabler..
>
> Nu har jeg problemet,at den altid gerne måtte afrunde tallet så der altid
> også var 2 decimaler på tallene.
> Og samtidig 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...

Ja, men så må du jo selv i gang med at afrunde

Enten, når du hælder tal i variablerne, eller når du tager dem ud af
variablerne.
Forskellen har naturligvis noget at gøre med, om afrundingen skal ske
før eller efter en evt. opsummering.


mvh
Krabsen



Ingelsen (10-01-2007)
Kommentar
Fra : Ingelsen


Dato : 10-01-07 15:20



> Ja, men så må du jo selv i gang med at afrunde
>
> Enten, når du hælder tal i variablerne, eller når du tager dem ud af
> variablerne.
> Forskellen har naturligvis noget at gøre med, om afrundingen skal ske før
> eller efter en evt. opsummering.
Jeg laver bare en CASE der kun køres i total beløb, ved kontant betaling..

Men hvordan er det lige jeg formatere min Double variabel så der ALTID er
,## (altid 2 decimaler efter kommaet)
også når der kun indtastes 100 = 100,00

en anden ting jeg nu tænker på, det kunne jo også være meget rart den selv
ændrede et . til et , hvis nonen skulle benytte .
Er der en løsning på dette??



Kasper (10-01-2007)
Kommentar
Fra : Kasper


Dato : 10-01-07 15:50


> Men hvordan er det lige jeg formatere min Double variabel så der ALTID er
> ,## (altid 2 decimaler efter kommaet)
> også når der kun indtastes 100 = 100,00
>
> en anden ting jeg nu tænker på, det kunne jo også være meget rart den selv
> ændrede et . til et , hvis nonen skulle benytte .
> Er der en løsning på dette??

Du kan lave en instring search for , / . , men du skal jo tænke på om OS er
UK eller DK da de bruger hver deres.

Så for at lave det universalt skal du udskifte det med det som står i
reginal settings..

også, hvad vil du gøre hvis de skriver 1.000,00 ?

Kasper



Kaj Julius (29-01-2007)
Kommentar
Fra : Kaj Julius


Dato : 29-01-07 22:49


"Ingelsen" <SLET@mig.dk> skrev i en meddelelse
news:45a4d8b1$0$904$edfadb0f@dread12.news.tele.dk...
> Jeg har nu lavet et kasse apparat i VB2005
> Alt virker men skal lige 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 samtidig 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
>
>

Hvis du vil afrunde til 25 øre (altså 123,04 bliver til 123,00 mens 123,14
bliver til 123,25), kan du bruge følgende:

a = round(b * 4) / 4




--------------------------------------------------------------------------------
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 1513 spam-mails
Betalende brugere får ikke denne besked i deres e-mails.
Hent en gratis SPAMfighter her.



Hykke (30-01-2007)
Kommentar
Fra : Hykke


Dato : 30-01-07 10:25

Bemærk at round funktionen anvender IEEE standarden for afrunding,
hvor man i "tvivlstilfælde" afrunder imod nærmeste lige tal.
Dvs. 2,5 afrundes til 2, mens 3,5 afrundes til 4.

Hvis man ønsker en afrundingsmetode hvor man altid runder opad når man
befinder sig midt imellem to tal, skal man kode det selv:

'Rounds a number to a whole number using the conventional rounding
method (0.5 always rounds upwards)
'The built-in VB rounding function uses bankers rounding, where
numbers are rounded towards the nearest even number
Public Function AfrundTilHeltal(dblTal As Double) As Long
AfrundTilHeltal = CLng(dblTal)
If dblTal = 0.5 + AfrundTilHeltal Then AfrundTilHeltal =
AfrundTilHeltal + 1
End Function


Kaj Julius (08-02-2007)
Kommentar
Fra : Kaj Julius


Dato : 08-02-07 02:48

Okay, det var jeg ikke klar over, men jeg har nu testet det, og du har helt
ret. Det var dog en djævelsk egenskab!!! Hvad har de tænkt på???? Vi er jo
ikke alle statistikere. Som mindstemål burde funktionen have en parameter,
hvor man kunne vælge mellem General og Bankers afrunding.

I dette tilfælde har det dog begrænset effekt, fordi tallet bliver ganget
med 4 inden afrundingen. For at der skulle kunne opstå problemer, skulle det
tal der skal afrundes altså indeholde 125 efter decimalpunktet, f.eks.
2,125. Det er usandsynligt, men selvfølgelig ikke umuligt, så du har nok ret
i, at en bedre afrundingsmetode er nødvendig.

Vil din lille rutine også virke rigtigt ved negative tal?
Ved f.eks. en værdi på -2,5 vil rutinen afrunde til -2. Skulle det ikke have
været afrundet til -3? Iflg. http://en.wikipedia.org/wiki/Rounding skal den
i hvert fald...


Jeg ville nok bruge denne rutine, som forhåbentlig er præcis:

Public Function AfrundTilHeltal(dblTal As Double) As Long
AfrundTilHeltal = Fix(dblTal)
If dblTal >= 0 Then
If dblTal >= AfrundTilHeltal + 0.5 Then AfrundTilHeltal =
AfrundTilHeltal + 1
Else
If dblTal <= AfrundTilHeltal - 0.5 Then AfrundTilHeltal =
AfrundTilHeltal - 1
End If
End Function

Eller også kunne man ændre den til:

Public Function AfrundTilHeltal(dblTal As Double) As Long
AfrundTilHeltal = Int(Abs(dblTal) + 0.5)
If dblTal < 0 Then AfrundTilHeltal = -AfrundTilHeltal
End Function

Stadig gælder dog, at en afrunding til nærmeste 25 øre (også for
krediteringer) kan ske med:

AfrundetBeløb = AfrundTilHeltal( Beløb * 4 ) / 4



--------------------------------------------------------------------------------
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 1560 spam-mails
Betalende brugere får ikke denne besked i deres e-mails.
Hent en gratis SPAMfighter her.



Hykke (08-02-2007)
Kommentar
Fra : Hykke


Dato : 08-02-07 09:41


> Vil din lille rutine også virke rigtigt ved negative tal?

Øhmn nej min metode bruges i en applikation hvor vi kun arbejder med
positive tal, så det havde jeg glemt.

Bemærk iøvrigt at i VB.Net version 2.0 er der kommet en ekstra
parameter til round funktionen, der gør at man kan specificere
"AwayFromZero" som afrundingsmetode, så Microsoft er blevet klogere


Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste