Nieuws:

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

Auteur Topic: [OPGELOST] java en floats met decimalen  (gelezen 2835 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.