Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

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

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

Offline davy.vereycken

  • Lid
  • Steunpunt: Nee
[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
  • Steunpunt: Nee
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


Offline davy.vereycken

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