[VB] doorbereken klopt niet bij afronden op 2 decimalen

Pagina: 1
Acties:
  • 457 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Ik heb een klein visual basic probleempje.

Als ik een getal in een textbox afrond op 2 decimalen en er verder mee ga rekenen klopt het eindtotaal niet. Er is een afwijking van enkele tienden. Op zich logisch, maar niet de bedoeling.

Hoe zorg ik ervoor dat de som dus rekent met meerdere getallen achter de komma terwijl hij er maar 2 laat zien in de textbox?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:35

gorgi_19

Kruimeltjes zijn weer op :9

Visual Basic .NET:
1
2
3
4
5
6
Dim dVariabelenaam as double
Dim dVariabelenaam2 as double

...
txtBox.Text = Round(dVariabelenaam,2)
txtBox2.Text = CType(dVariabelenaam + dVariabelenaam2,string)

?

[ Voor 20% gewijzigd door gorgi_19 op 14-03-2003 23:08 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Ik zal even wat meer info posten:

dit is m'n code die hangt onder de textboxen
code:
1
2
3
4
5
6
Private Sub Text1_Change()

Text4.Text = Round(Val(Text1.Text) / 100 * 19, 2)
Text3.Text = Round(Val(Text1.Text) / 1.01, 2)
Text2.Text = Round(Val(Text1.Text) - (Text3.Text), 2)
Text5.Text = Round(Val(Text3.Text) + (Text4.Text), 2)


En dit is het programmaatje:
Afbeeldingslocatie: http://home.wanadoo.nl/entrefice/Other/GoT/txtbox.jpg

Je voert dus een getal in in text1.text (Bedrag exlc. BTW) en dan gaat ie doorrekenen.
Op het plaatje zie je van boven naar beneden text1.text, text2.text etc

Acties:
  • 0 Henk 'm!

  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023

KO

Je moet in ieder geval het type double voor je variabelen nemen. Het resultaat kan je afronden voordat je dat laat zien.

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:35

gorgi_19

Kruimeltjes zijn weer op :9

Erhm.. Sla onafgeronde waarden op en werk niet met de tekstboxwaarden :?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 27-05 10:58
Ok ik weet nix van Visual Basic ... en ik weet ook geen antwoord op je vraag maar ik zie daar een enge berekening. Want ik neem aan dat je met ....

code:
1
Text3.Text = Round(Val(Text1.Text) / 1.01, 2)

... 1% korting wilt uitrekenen en dat is dus fout!!! Het moet zijn:

code:
1
Text3.Text = Round(Val(Text1.Text) - (Val(Text1.Text) * 0.01), 2)

Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
KO schreef op 14 maart 2003 @ 23:48:
Je moet in ieder geval het type double voor je variabelen nemen. Het resultaat kan je afronden voordat je dat laat zien.
Het type double ipv round? Heb niet veel kennis van visual basic helaas dus zou je hier iets meer over kunnen vertellen?
Erhm.. Sla onafgeronde waarden op en werk niet met de tekstboxwaarden
Hoe gaat dat in z'n werk?
Ok ik weet nix van Visual Basic ... en ik weet ook geen antwoord op je vraag maar ik zie daar een enge berekening. Want ik neem aan dat je met ....
code:
1
Text3.Text = Round(Val(Text1.Text) / 1.01, 2)

... 1% korting wilt uitrekenen en dat is dus fout!!! Het moet zijn:
code:
1
Text3.Text = Round(Val(Text1.Text) - (Val(Text1.Text) * 0.01), 2)
Oke bedankt, heb deze aanpassing gemaakt :)

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 10:33

NetForce1

(inspiratie == 0) -> true

Misschien is het verstandig om eerst is even een goed VB boek door te nemen, dan zou je bijv. weten wat uberhaupt een type is (double is voor getallen met zwevende komma). Je zou dan ook (kunnen) weten dat round een functie is, en dus geen type.

Wat je dus moet doen is eerst de waardes uit je textboxen in variabelen van het type double zetten, en daar vervolgens mee gaan rekenen

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 25-04 17:58

robjanssen

Software Developer

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Text1_Change()
Dim dblBedragExclBTW as Double
Dim dblBTW as Double
Dim dblNieuwBedrag as Double

dblBedragExclBTW = Val(Text1.Text)
dblBTW = dblBedragExclBTW / 100 * 19
dblNieuwBedrag = dblBedragExclBTW / 1.01

Text4.Text = Round(dblBTW, 2)
Text3.Text = Round(dblNieuwBedrag, 2)
Text2.Text = Round(dblBedragExclBTW - dblNieuwBedrag, 2)
Text5.Text = Round(dblNieuwBedrag + dblBTW, 2)

End Sub

Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
robjanssen schreef op 15 March 2003 @ 22:19:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Text1_Change()
Dim dblBedragExclBTW as Double
Dim dblBTW as Double
Dim dblNieuwBedrag as Double

dblBedragExclBTW = Val(Text1.Text)
dblBTW = dblBedragExclBTW / 100 * 19
dblNieuwBedrag = dblBedragExclBTW / 1.01

Text4.Text = Round(dblBTW, 2)
Text3.Text = Round(dblNieuwBedrag, 2)
Text2.Text = Round(dblBedragExclBTW - dblNieuwBedrag, 2)
Text5.Text = Round(dblNieuwBedrag + dblBTW, 2)

End Sub
Hardstikke bedankt voor je reply :)

Helaas is het zo nog niet opgelost, het afronden gaat nog steeds niet goed, er blijft een afrondingsverschil.

Acties:
  • 0 Henk 'm!

  • E-RIC
  • Registratie: November 2000
  • Laatst online: 27-05 13:35
KillR-B schreef op 15 March 2003 @ 00:17:
... 1% korting wilt uitrekenen en dat is dus fout!!! Het moet zijn:
code:
1
Text3.Text = Round(Val(Text1.Text) - (Val(Text1.Text) * 0.01), 2)
En als je dan alles binnen haakjes werkt krijg je:
Visual Basic .NET:
1
Text3.Text = Round(Val((Text1.Text) * 0.99), 2)

Iets korter :)

En de BTW gaat toch over het bedrag waar de korting al vanaf is? Nu wordt de BTW berekent met text1.text

Je krijgt dus:
Visual Basic .NET:
1
2
3
4
text2.Text = Round(Val((text1.Text) * 0.01), 2)
text3.Text = Round(Val((text1.Text) * 0.99), 2)
text4.Text = Round(Val(text4.Text * 0.19), 2)
text5.Text = Round(Val((text3.Text) + Val(text4.Text)), 2)

[ Voor 65% gewijzigd door E-RIC op 16-03-2003 23:12 ]


Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Nee BTW mag niet berekend worden over het bedrag waar de korting al vanaf is, dan ga je dus korting krijgen op de BTW en daar is de belastingdienst niet zo blij mee.
Ik ga jouw versie even proberen :)

Acties:
  • 0 Henk 'm!

  • E-RIC
  • Registratie: November 2000
  • Laatst online: 27-05 13:35
--Erik-- schreef op 16 March 2003 @ 23:59:
Nee BTW mag niet berekend worden over het bedrag waar de korting al vanaf is, dan ga je dus korting krijgen op de BTW en daar is de belastingdienst niet zo blij mee.
Ik ga jouw versie even proberen :)
Ehm, omdat het percentages zijn maakt het niet uit of je het op het bedrag ex. btw de korting geeft of op het bedrag incl. btw. Maar als je op ex. btw doet, klopt de volgorde die je hebt in de bedragen (van boven naar beneden)
code:
1
2
3
4
ex btw korting  btw    incl. btw
100     1.19     19     117.81 <-- goed
99              18.81   117.81 <-- goed
100     1.00     19     118    <-- fout

Acties:
  • 0 Henk 'm!

Anoniem: 43169

Gebruik voor het rekenen met geld nooit een floating point... reken in centen en laat de integer functies zelf afronden.. rond altijd zo laat mogelijk in de berekening af (maar sla het nooit afgerond in de db op)... toon de afgeronden waarden alleen aan de user...

Acties:
  • 0 Henk 'm!

  • Apen-nootjes
  • Registratie: September 2001
  • Laatst online: 03-04 12:48

Apen-nootjes

aka Apen-klootjes

Je zult moeten zorgen dat je gewoon normaal rekent op de achtergrond met zoveel komma's op de achtergrond alsdat je kan. Wat je de gebruiker laat zien is het afgeronde getal maar op de achtergrond. Gebruik dus een variabele currency en laat het met een afronding aan de gebruiker zien (afronding door middel van format...)

SmartDoDo: Ach, afhankelijk van je smaak kan het best een lekker geil ding zijn :P
You never had a date you couldn't inflate


Acties:
  • 0 Henk 'm!

  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 07-02 06:22
En je weet natuurlijk ook dat je wanneer je Val() gebruikt voor strings, en wilt decimalen achter de komma gebruiken je wel ##.## moet invullen. Als je namelijk een komma gebruikt dan pakt hij alleen de cijfers voor de komma.

Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Ik heb nu dit:

code:
1
2
3
4
Text4.Text = (Val(Text1.Text) / 100 * 19)
Text2.Text = (Val(Text1.Text) * 0.01)
Text3.Text = (Val(Text1.Text) - (Val(Text2.Text)))
Text5.Text = (Val(Text3.Text) + (Text4.Text))


en de uitkomst is goed, alleen niet afgerond op 2 decimalen.
Dus zonder ##.## en toch rekent ie de getalen na de komma mee!
Waar zou ik die ##.## moeten plaatsen dan?

Acties:
  • 0 Henk 'm!

  • E-RIC
  • Registratie: November 2000
  • Laatst online: 27-05 13:35
--Erik-- schreef op 18 March 2003 @ 11:09:
code:
1
2
3
4
Text4.Text = (Val(Text1.Text) / 100 * 19)
Text2.Text = (Val(Text1.Text) * 0.01)
Text3.Text = (Val(Text1.Text) - (Val(Text2.Text)))
Text5.Text = (Val(Text3.Text) + (Text4.Text))
Dit is dus fout, tenzij je geen 1% korting geeft:
[rml]E-RIC in "[ VB] doorbereken klopt niet bij afronden"[/rml]

Ik zal met bovenstaande code ff een voorbeeld doen. Stel dat het bedrag ex btw 100 (doller/euro) is. Met btw is het dus 119 euro. 1% voor de klant => 117.81. Als ik alles nareken met bovenstaande formules, krijg je dit:
text1.text = 100 (ex btw)
text4.text = 100 / 100 * 19 = 19 (btw)
text2.text = 100 * 0.01 = 1 (korting)
text3.text = 100 - 1 = 99 (nieuw bedrag)
text5.text = 99 + 19 = 118 (bedrag incl. btw)

Als je geen korting geeft, is het bedrag incl. btw 119 euro. Je geeft dus ((199-118)/119) * 100% = 0.84% korting

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:35

gorgi_19

Kruimeltjes zijn weer op :9

:? * gorgi_19 gaat eens een beetje letten op de economische aspecten van het verhaal..

Het verhaal van E-RIC klopt, economisch gezien, iig niet. BTW gaat is een belasting over de omzet, niet van de theoretische verkoopprijs uit.
Ik koop heb een product A voor 100 Euro, ex. btw. Ik beding hier een korting op van 10%.

De BTW over dit bedrag is dan (100 - 10% * 100) * 19%. Anders gezegd, de BTW is dus NIET afhankelijk van de gegeven verkoopprijs, maar van de werkelijke verkoopprijs.

Als je een korting bedingt over de verkoopprijs inclusief BTW, dan daalt zowel de Opbrengst verkopen evenredig met de te betalen BTW.

[ Voor 58% gewijzigd door gorgi_19 op 18-03-2003 12:06 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
gorgi_19 schreef op 18 March 2003 @ 12:02:
:? * gorgi_19 gaat eens een beetje letten op de economische aspecten van het verhaal..

Het verhaal van E-RIC klopt, economisch gezien, iig niet. BTW gaat is een belasting over de omzet, niet van de theoretische verkoopprijs uit.
Ik koop heb een product A voor 100 Euro, ex. btw. Ik beding hier een korting op van 10%.

De BTW over dit bedrag is dan (100 - 10% * 100) * 19%. Anders gezegd, de BTW is dus NIET afhankelijk van de gegeven verkoopprijs, maar van de werkelijke verkoopprijs.

Als je een korting bedingt over de verkoopprijs inclusief BTW, dan daalt zowel de Opbrengst verkopen evenredig met de te betalen BTW.
En dus naai je de belastingdienst door korting te berekenen over hun te verkrijgen BTW-bedrag toch? :?

Acties:
  • 0 Henk 'm!

  • JeroenG
  • Registratie: Juli 2002
  • Laatst online: 16-05 15:00
BTW wordt betaald over de WERKELIJKE verkoopprijs. Dus als een produkt normaal 100 euro kost, maar het is in de aanbieding en ik kan het kopen voor 75 euro, dan betaal ik BTW over die 75 euro (=89,25 euro inclusief btw). Volgens jouw systeem zou ik 75+19=94 euro betalen.

JeroenG

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:35

gorgi_19

Kruimeltjes zijn weer op :9

--Erik-- schreef op 18 March 2003 @ 12:40:
[...]


En dus naai je de belastingdienst door korting te berekenen over hun te verkrijgen BTW-bedrag toch? :?
Erhm.. Hoezo dan?

Je krijgt toch ook minder?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • E-RIC
  • Registratie: November 2000
  • Laatst online: 27-05 13:35
BTW = Belasting Toegevoegde Waarde
Als je korting geeft, is de toegevoegde waarde minder, dus ook de belasting (BTW)
Volgens mij kan het niet simpeler :?
M'n vorige voorbeeld vond ik overigens ook al zo duidelijk mogelijk uitgelegd :?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:35

gorgi_19

Kruimeltjes zijn weer op :9

Hoezo naai je dan de belastingdienst? Je belast de korting evenredig door op zowel je opbrengst verkopen als je te betalen belasting.

Misschien een idee om eens een economieboek door te kijken?

[ Voor 255% gewijzigd door gorgi_19 op 18-03-2003 13:30 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Martin Sturm
  • Registratie: December 1999
  • Laatst online: 23:04
E-RIC schreef op 18 maart 2003 @ 13:06:
BTW = Belasting Toegevoegde Waarde
Als je korting geeft, is de toegevoegde waarde minder, dus ook de belasting (BTW)
Volgens mij kan het niet simpeler :?
M'n vorige voorbeeld vond ik overigens ook al zo duidelijk mogelijk uitgelegd :?

Je bent gewoon flauwekul aan het ophangen. BTW wordt pas berekend aan het einde van een factuur, dus nadat alle kortingen e.d. eraf zijn. Met jou theorie zou er toch niemand een procentuele korting gaan geven op de verkoopprijs? Want dan zou de uiteindelijke consumentenprijs hoger zijn, dan dat je gewoon de verkoopprijs tijdelijk verlaagd.

Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

OK, om dat BTW verhaal even af te kappen:

bedrag ex BTW: 125000,-
bedrag BTW: 23750,-
Totaalbedrag: 148750,-

Laten we nu eens 10% korting geven, op de ex-prijs.
bedrag ex BTW: 112500,-
bedrag BTW: 21375,-
Totaalbedrag: 133875,-

En nu gaan we de korting bereken op het bedrag INCL BTW
bedrag ex BTW: 125000,-
bedrag BTW: 23750,-
Totaalbedrag: 148750,-
Bedrag - korting 133875,-

Hmmzz... dat lijkt hetzelfde? Natuurlijk! Als je procentuele korting geeft, hoeft een klant minder EX BTW te betalen. En over dat verminderde bedrag wordt dan BTW berekend. Omdat het ex-bedrag 10% lager ligt door de korting, hoeft dus ook (over) 10% minder BTW betaald te worden. Al met al bereken je de korting over je eigen bedrag en daar dan weer de BTW over, maar de volgorde van rekenen maakt niet uit. Zolang je maar 19% BTW rekent...!

My personal website


Acties:
  • 0 Henk 'm!

  • E-RIC
  • Registratie: November 2000
  • Laatst online: 27-05 13:35
Martin Sturm schreef op 18 March 2003 @ 13:22:

[...]

Je bent gewoon flauwekul aan het ophangen. BTW wordt pas berekend aan het einde van een factuur, dus nadat alle kortingen e.d. eraf zijn. Met jou theorie zou er toch niemand een procentuele korting gaan geven op de verkoopprijs? Want dan zou de uiteindelijke consumentenprijs hoger zijn, dan dat je gewoon de verkoopprijs tijdelijk verlaagd.
Quote je niet de verkeerde? De topicstarter berekend de BTW op het originele bedrag, ik op het bedrag waar de korting af is

Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Ik heb navraag gedaan bij de boekhouder EN bij de belastingdienst en beide zeggen dat je ABSOLUUT geen korting mag berekenen over het bedrag incl. BTW.
De juiste manier is dus eerst het BTW bedrag uitrekenen, vervolgens de korting op het bedrag excl. BTW en dan deze 2 bedragen bij elkaar op tellen.
Dus wordt het:

Goede manier
code:
1
2
3
4
5
Bedrag excl. BTW = 100
BTW Bedrag       = 19
1% korting       = 1
Nieuw bedrag     = 99
Totaal bedrag    = 99+ 19 = 118


En dus NIET:
Foute manier
code:
1
2
3
4
5
Bedrag excl. BTW = 100
BTW Bedrag       = 19
Totaal bedrag    = 119
1% korting       = 1.19   
Nieuw bedrag     = 117.81

Acties:
  • 0 Henk 'm!

  • E-RIC
  • Registratie: November 2000
  • Laatst online: 27-05 13:35
Toch klopt het niet, want BTW wordt geheven over het bedrag excl. BTW. Dat is in dit geval 99 euro. Dus de BTW is 0.19*99. Zou ook wel idioot zijn als dit het geval is:
code:
1
2
3
4
5
Bedrag ex. BTW = 1000
BTW bedrag     =  190
90% korting    =  900
Nieuw bedrag   =  100
Totaal bedrag  =  290

Dan is de BTW dus veel hoger dan het bedrag zelf 8)7

Als ik weer college heb, zal ik het wel navragen bij de professoren.

[ Voor 15% gewijzigd door E-RIC op 30-03-2003 16:14 ]


Acties:
  • 0 Henk 'm!

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Prima :)
Zo heb ik het te horen gekregen vandaar dat ik het nog een keer wilde melden, kan altijd makkelijk zijn voor de mensen hier :)
Pagina: 1