Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-07-2011, 17:18   #1
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
[JAVA] Arrotondamento double non convincente

Codice:
private double arrotondaDoubleEccesso(double d, int cifre) {
        BigDecimal bd = new BigDecimal(d);
        bd = bd.setScale(cifre, BigDecimal.ROUND_UP);
        return bd.doubleValue();

    }
sappiamo bene come funziona, però io ho fatto esattamente questa operazione:

25/45
10/45
10/45

e i risultati sono stati

0.556
0.223
0.223

che ovviamente fà 1.002

posso ovviare in qualche modo a questo problema o no?
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2011, 21:58   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da franksisca Guarda i messaggi
posso ovviare in qualche modo a questo problema o no?
Se prima di fare la somma arrotondi tutti i parziali alla terza cifra con ROUND_UP ovviamente il totale calcolato non è equivalente a quello dato dai valori originari.
Il "rimedio" è uno solo: evitare di arrotondare i parziali prima di sommarli.

Immagino tu voglia arrivare ad avere la somma totale esatta in uno scenario in cui per qualche ragione sei costretto a elaborare così i parziali prima di poterli sommare, ma senza una descrizione più articolata del tuo scenario, limiti da rispettare e requisiti da soddisfare è molto difficile darti qualche consiglio.

Tirando un tentativo a caso potrei allora suggerirti di non salvare il valore double arrotondato della frazione 10/45, ma la frazione stessa magari usando due short o due int (volendo potresti sempre prima minimizzare i termini della frazione, ad es.: 10/45 -> 2/9) fino al momento in cui dovrai fare la somma: a quel punto produci il valore double del risultato di ogni frazione da sommare e lo accumuli alla somma.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 12-07-2011 alle 22:01.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2011, 08:23   #3
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12966
Quoto banryu, se hai bisogno dell'arrotondamento, lo devi effettuare alla fine dei calcoli, non durante gli stessi.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2011, 09:47   #4
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
allora il problema in esame è quello del calcolo delle tabelle millesimali, quindi i valori "parziali" mi servono, perchè devo assegnare dei millesimi ad ogni singola unità immobiliare.

l'idea della frazione quindi non è adattabile, così come non è adattabile un troncamento forzato a tre cifre. Dovrò vedere se sesistono costanti diverse da ROUND_UP che mi possono aiutare.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2011, 10:07   #5
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
al momento la soluzione più immediata (e anche la più ovvia) è di usare BigDecimal.ROUND_HALF_EVEN. Se comunque avete anche altre idde postate pure
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2011, 20:15   #6
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Non potresti usare sempre i valori "effettivi", salvati come BigDecimal (quindi a precisione infinita) e convertirli solo quando li devi rappresentare, cioè praticamente quando li devi stampare? Dovresti costruirti una funzione che traduce il numero in stringa, senza passare per .doubleValue().
__________________
"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 13-07-2011, 20:41   #7
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da Mixmar Guarda i messaggi
Non potresti usare sempre i valori "effettivi", salvati come BigDecimal (quindi a precisione infinita) e convertirli solo quando li devi rappresentare, cioè praticamente quando li devi stampare? Dovresti costruirti una funzione che traduce il numero in stringa, senza passare per .doubleValue().
forse il problema non è chiaro.
io ho bisogno della rappresentazione con 3 cifre dopo la virgola dal momento del calcolo perchè devono essere immediatamente visualizzati.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2011, 08:01   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da franksisca Guarda i messaggi
forse il problema non è chiaro.
io ho bisogno della rappresentazione con 3 cifre dopo la virgola dal momento del calcolo perchè devono essere immediatamente visualizzati.
Ieri mi era venuto in mente di suggerirti ti farti una funzione, usare un array per memorizzare i parziali, e arrotondare per eccesso o per difetto ogni elemento in base all'indice (pari o dispari) e comunque avendo cura di verificare la somma totale. Ma non so se è una buona idea o meno: non mi sono mai trovato in un caso simile al tuo.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2011, 15:38   #9
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Ieri mi era venuto in mente di suggerirti ti farti una funzione, usare un array per memorizzare i parziali, e arrotondare per eccesso o per difetto ogni elemento in base all'indice (pari o dispari) e comunque avendo cura di verificare la somma totale. Ma non so se è una buona idea o meno: non mi sono mai trovato in un caso simile al tuo.
valuterò
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
I coupon nascosti di Amazon si rinnovano...
Disponibili i video e le immagini in alt...
La NASA ha rilasciato le prime fotografi...
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: 21:07.


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