Nieuws:

Ubuntu-NL weer online!

Na een periode van technische problemen en een overbelaste server zijn we eindelijk weer bereikbaar.
Samen met Hobbynet, onze sponsor en hostingpartner, hebben we een oplossing gevonden zodat alles weer soepel draait.

Bedankt voor jullie geduld en begrip. We hopen nu weer verder te gaan waar we gebleven waren.

Het team van Ubuntu-NL

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [OPGELOST] java en floats met decimalen  (gelezen 3202 keer)

[OPGELOST] java en floats met decimalen
« Gepost op: 2009/02/13, 11:13:44 »
Ik heb een probleem met een java programmaatje ivm berekeningen met floats. Het programma leest een csv-file in met daarin bedragen per categorie. De bedragen hebben maximaal 2 cijfers na de komma. Deze worden eerst naar float omgezet en daarna kunnen meerdere van deze bedragen bij elkaar opgeteld worden.

Het resultaat bevat soms 5 cijfers na de komma wat niet de bedoeling is en logischerwijs ook niet kan daar ik enkel bedragen met maximum 2 cijfers na de komma als invoer gebruik.

Hieronder wat code als voorbeeld hoe ik de floats gebruik. Echte programma leest invoer uit csv-file, hier heb ik wat hardcoded waardes gebruikt ter illustratie. Ik weet niet of net dit voorbeeld bedrag meer dan 2 decimalen genereerd maar zo zie je hoe het gemaakt is.

Iemand een idee wat ik mis doe en waarom java dit doet?

// txtbedrag
String txtbedrag="";
float bedrag=0;
float totaal=0;

txtbedrag="21.3";
bedrag=Float.valueOf(txtbedrag.trim()).floatValue();
totaal+=bedrag;

txtbedrag="1235.98";
bedrag=Float.valueOf(txtbedrag.trim()).floatValue();
totaal+=bedrag;
« Laatst bewerkt op: 2009/02/13, 13:20:42 door davy.vereycken »

Offline jimi

  • Lid
Re: java en floats met decimalen
« Reactie #1 Gepost op: 2009/02/13, 13:07:50 »
Voordat je het resultaat afdrukt, kun je deze afronden, bijvoorbeeld met
import java.text.NumberFormat;
...
System.out.println(NumberFormat.getCurrencyInstance().format(totaal));

Sommige getallen kunnen echter niet exact worden opgeslagen als floating-point waarde, alleen een benadering ervan. Zie ook http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

Beter is om het bedrag als eurocenten op te slaan in een int of BigDecimal. Zie ook hier: http://www.javaranch.com/journal/2003/07/MoneyInJava.html


Re: java en floats met decimalen
« Reactie #2 Gepost op: 2009/02/13, 13:20:06 »
Bedankt voor de uitleg en verhelderende sites.