Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-03-2008, 16:49   #1
satoshi2005
Senior Member
 
L'Avatar di satoshi2005
 
Iscritto dal: Mar 2005
Città: Ticino, Svizzera
Messaggi: 431
[Java] Errore calcolo

Salve gente,
Secondo voi perché:

Codice:
System.out.println((1242.0 / 60.0) * 3.0);
mi scrive "62.099999999999994"?

:S
satoshi2005 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2008, 16:59   #2
wizard1993
Senior Member
 
L'Avatar di wizard1993
 
Iscritto dal: Apr 2006
Messaggi: 22462
prova a passarglieli come interi invece che come valori a virgola mobile
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza
wizard1993 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2008, 17:00   #3
satoshi2005
Senior Member
 
L'Avatar di satoshi2005
 
Iscritto dal: Mar 2005
Città: Ticino, Svizzera
Messaggi: 431
Quote:
Originariamente inviato da wizard1993 Guarda i messaggi
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)
satoshi2005 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2008, 18:15   #4
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Quote:
Originariamente inviato da satoshi2005 Guarda i messaggi
Salve gente,
Secondo voi perché:

Codice:
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
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2008, 20:26   #5
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non è strano: è normalissimo. Se fai prima la divisione, hai già "perso informazione", che poi NON può più essere recuperata con la moltiplicazione...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2008, 10:19   #6
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
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 è
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2008, 10:26   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da satoshi2005 Guarda i messaggi
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.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2008, 16:41   #8
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Quote:
Originariamente inviato da andbin Guarda i messaggi
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...

Vanno bene, o c'è un sistema più "generico" per affrontare in Java il problema dell'arrotondamento dovuto a conversione decimale -> binario -> decimale?
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2008, 08:13   #9
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
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 è
Lo è perché, con quella divisione, hai appunto perso informazione.
Quote:
Originariamente inviato da Mixmar Guarda i messaggi
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...

Vanno bene, o c'è un sistema più "generico" per affrontare in Java il problema dell'arrotondamento dovuto a conversione decimale -> binario -> decimale?
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.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
ASUS porta in Italia il nuovo Zenbook Du...
Assassin's Creed: Black Flag Resynced, s...
Xbox Game Pass cambierà: tra le n...
I nuovi Surface Pro e Laptop sono vicini...
OnePlus ci riprova con la fascia bassa: ...
La Top 10 delle offerte Amazon del weeke...
XGIMI MoGo 2 Pro a 339€: Google TV con N...
Forum IT & Intelligence 2026: dall'A...
iPhone 16e per la prima volta a meno di ...
Stop Killing Games: Ross Scott convince ...
Annunciata la tuta di volo di Vast che s...
Vast presenta il nuovo Large Docking Ada...
Una denuncia getta ombre sulle batterie ...
DJI Avata 2 Fly Smart Combo a 526€: il d...
Alla guida della nuova auto elettrica ci...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:09.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v