FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index All products support Grosso problema utilizzando int()
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Grosso problema utilizzando int()
Posted: Thu Jul 16, 2009 08:00 AM

Ho una casistica veramente particolare.
In pratica ho una variabile numerica che contiene la somma di una ventina di valori decimali.
Il risultato è 65.000000

il problema è che se faccio un int() di questa variabile per avere la sola parte intera, il risultato è 64 !!!!!

qualche idea ?

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 383
Joined: Tue Oct 11, 2005 01:01 PM
Re: Grosso problema utilizzando int()
Posted: Thu Jul 16, 2009 08:12 AM

Marco,

prova a fare la somma con Round( nValore1, 2 ) + Round( nValore2, 2 )

o

nTotale := INT( Round( nTotale, 2 ) )

Pedro Gonzalez
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Re: Grosso problema utilizzando int()
Posted: Thu Jul 16, 2009 09:38 AM

Si, così facendo funziona. Grazie.
Ma non c'è un sistema per risolvere il problema alla radice ? Non vorrei dovermi controllare tutte le parti del programma dove uso la funzione int()

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 383
Joined: Tue Oct 11, 2005 01:01 PM
Re: Grosso problema utilizzando int()
Posted: Thu Jul 16, 2009 09:52 AM

Marco,

questo problema si verifica solo quando fai tante operazioni con valori decimali, ma non sempre, l'unica soluzione che ho trovato io è l'uso del Round()

ciao

Pedro Gonzalez
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Grosso problema utilizzando int()
Posted: Thu Jul 16, 2009 02:39 PM

Il problema è infatti legato all'uso della rappresentazione numerica floating-point, è ben conosciuto e purtroppo inevitabile.

EMG

Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Re: Grosso problema utilizzando int()
Posted: Thu Jul 16, 2009 05:27 PM

Perché inevitabile ? Non può essere corretta la funzione int() a livello di codice di xharbour facendogli fare un round prima di estrapolare l'intero ?
Mi sembra assurdo doverci creare una funzione intcorretto() da utilizzare al posto di int(). Se xharbour sbaglia anche il calcolo dell'intero non credo che avrà la possibilità di ampliare molto la sua platea di sviluppatori.

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Grosso problema utilizzando int()
Posted: Thu Jul 16, 2009 05:58 PM

Non hai capito: xHarbour non sbaglia niente. Se farai la prova con qualunque altro linguaggio che utilizza i floating-point otterrai risultati analoghi (succede perfino con le calcolatrici). L'errore non è nella Int() che fa il suo dovere correttamente e sarebbe anzi un errore arrotondare il risultato internamente. Allora sì che non funzionerebbe come uno si aspetta. Invece l'errore è del programmatore che, probabilmente non conoscendo come si adoperano i floating-point, non ha effettuato gli indispensabili arrotondamenti (ma succede a tutti, perfino a me che invece conosco la problematica dei floating-point da circa 27 anni).

EMG

Posts: 383
Joined: Tue Oct 11, 2005 01:01 PM
Re: Grosso problema utilizzando int()
Posted: Fri Jul 17, 2009 07:38 AM

Si, ma poi non è un errore che capita spesso, e purtroppo di solito, se ne accorge il cliente :-(
dopodichè, velocemente ti ricordi della funzione round() per risolvere questo problema, e non solo, alle volte neanche la funzione round funziona corretamente... e io per questo motivo uso un'altra copiata dal forum che chiamo round2() e arrotonda meglio...

cose della vita..

ciao

Pedro Gonzalez
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Re: Grosso problema utilizzando int()
Posted: Fri Jul 17, 2009 09:19 AM

Si, anchio uso round2 (credo me l'abbia girata proprio Enrico)

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Grosso problema utilizzando int()
Posted: Fri Jul 17, 2009 09:42 AM
pymsoft wrote:Si, ma poi non è un errore che capita spesso, e purtroppo di solito, se ne accorge il cliente :-)


Vero. :-)

pymsoft wrote:alle volte neanche la funzione round funziona corretamente...


Non mi risulta. Riusciresti a fare un piccolo esempio che lo dimostri? Se c'è un problema sarebbe meglio farlo sistemare, no?

EMG
Posts: 383
Joined: Tue Oct 11, 2005 01:01 PM
Re: Grosso problema utilizzando int()
Posted: Fri Jul 17, 2009 02:07 PM

Enrico,

viewtopic.php?f=6t=5679hilit=round+error

magari hanno risolto (sicuramente) nelle versione successive di xharbour

ciao

p.s. io uso la funzione round2 da anni per questo motivo, non ho piu controllato con le nuove versioni di xharbour.

&&

Pedro Gonzalez
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Grosso problema utilizzando int()
Posted: Fri Jul 17, 2009 06:17 PM
pymsoft wrote:Enrico,

viewtopic.php?f=6&t=5679&hilit=round+error

magari hanno risolto (sicuramente) nelle versione successive di xharbour


Infatti funziona perfettamente. Ti conviene abbandonare la round2().

EMG
Posts: 383
Joined: Tue Oct 11, 2005 01:01 PM
Re: Grosso problema utilizzando int()
Posted: Wed Jul 22, 2009 12:18 PM

ok, grazie.

Pedro Gonzalez

Continue the discussion