View Full Version : [Java] Errore calcolo
satoshi2005
01-03-2008, 16:49
Salve gente,
Secondo voi perché:
System.out.println((1242.0 / 60.0) * 3.0);
mi scrive "62.099999999999994"?
:S
wizard1993
01-03-2008, 16:59
prova a passarglieli come interi invece che come valori a virgola mobile
satoshi2005
01-03-2008, 17:00
prova a passarglieli come interi invece che come valori a virgola mobile
li ho bisogno a virgola mobile.. (perché sono delle variabili di tipo double, ma anche se li stampo senza variabili fa quel problema)
Salve gente,
Secondo voi perché:
System.out.println((1242.0 / 60.0) * 3.0);
mi scrive "62.099999999999994"?
:S
è strano.. comunque se fai prima la moltiplicazione per 3 e poi la divisione per 60 funziona :boh:
cdimauro
01-03-2008, 20:26
Non è strano: è normalissimo. Se fai prima la divisione, hai già "perso informazione", che poi NON può più essere recuperata con la moltiplicazione...
Non è strano: è normalissimo. Se fai prima la divisione, hai già "perso informazione", che poi NON può più essere recuperata con la moltiplicazione...
si per questo io ho subito provato a mettere prima la moltiplicazione.. ma 1242/60 fa 20,7 e così a occhio non mi sembra un numero che possa causare errori. ma evidentemente lo è :p
mi scrive "62.099999999999994"?Meglio arrotondare a poche cifre decimali:
System.out.format ("%.4f%n", (1242.0 / 60.0) * 3.0); // solo Java 5+
Altrimenti si può usare java.text.NumberFormat/java.text.DecimalFormat.
Meglio arrotondare a poche cifre decimali:
System.out.format ("%.4f%n", (1242.0 / 60.0) * 3.0); // solo Java 5+
Altrimenti si può usare java.text.NumberFormat/java.text.DecimalFormat.
andbin, ne approfitto per chiederti una domanda a proposito dell'approccio generale a questo tipo di problema: la soluzione più semplice per risolverlo mi sembra quella di usare classi numeriche a precisione infinita, come BigInteger o BigDecimal. Però è chiaro che in questo, come in altri casi, si tratterebbe di usare il classico cannone per ammazzare le mosche.
Altrimenti l'alternativa è quella di usare numeri a dimensione decimale fissa... :stordita:
Vanno bene, o c'è un sistema più "generico" per affrontare in Java il problema dell'arrotondamento dovuto a conversione decimale -> binario -> decimale? :stordita:
cdimauro
03-03-2008, 08:13
si per questo io ho subito provato a mettere prima la moltiplicazione.. ma 1242/60 fa 20,7 e così a occhio non mi sembra un numero che possa causare errori. ma evidentemente lo è :p
Lo è perché, con quella divisione, hai appunto perso informazione. :)
andbin, ne approfitto per chiederti una domanda a proposito dell'approccio generale a questo tipo di problema: la soluzione più semplice per risolverlo mi sembra quella di usare classi numeriche a precisione infinita, come BigInteger o BigDecimal. Però è chiaro che in questo, come in altri casi, si tratterebbe di usare il classico cannone per ammazzare le mosche.
Altrimenti l'alternativa è quella di usare numeri a dimensione decimale fissa... :stordita:
Vanno bene, o c'è un sistema più "generico" per affrontare in Java il problema dell'arrotondamento dovuto a conversione decimale -> binario -> decimale? :stordita:
Anche con quelle classi "a precisione infinita", nel caso di operazioni come la divisione con certi numeri necessariamente il risultato dovrà essere approssimato, in quanto non rappresentabile.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.