Grosso problema utilizzando int()
Moderator: Enrico Maria Giordano
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Grosso problema utilizzando int()
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 ?
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
Marco Turco
SOFTWARE XP LLP
Re: Grosso problema utilizzando int()
Marco,
prova a fare la somma con Round( nValore1, 2 ) + Round( nValore2, 2 )
o
nTotale := INT( Round( nTotale, 2 ) )
prova a fare la somma con Round( nValore1, 2 ) + Round( nValore2, 2 )
o
nTotale := INT( Round( nTotale, 2 ) )
Pedro Gonzalez
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Re: Grosso problema utilizzando int()
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()
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
Marco Turco
SOFTWARE XP LLP
Re: Grosso problema utilizzando int()
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
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
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Grosso problema utilizzando int()
Il problema è infatti legato all'uso della rappresentazione numerica floating-point, è ben conosciuto e purtroppo inevitabile.
EMG
EMG
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Re: Grosso problema utilizzando int()
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.
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
Marco Turco
SOFTWARE XP LLP
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Grosso problema utilizzando int()
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
EMG
Re: Grosso problema utilizzando int()
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
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
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Re: Grosso problema utilizzando int()
Si, anchio uso round2 (credo me l'abbia girata proprio Enrico)
Best Regards,
Marco Turco
SOFTWARE XP LLP
Marco Turco
SOFTWARE XP LLP
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Grosso problema utilizzando int()
Vero.pymsoft wrote:Si, ma poi non è un errore che capita spesso, e purtroppo di solito, se ne accorge il cliente
Non mi risulta. Riusciresti a fare un piccolo esempio che lo dimostri? Se c'è un problema sarebbe meglio farlo sistemare, no?pymsoft wrote:alle volte neanche la funzione round funziona corretamente...
EMG
Re: Grosso problema utilizzando int()
Enrico,
http://forums.fivetechsupport.com/viewt ... ound+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.
http://forums.fivetechsupport.com/viewt ... ound+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
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Grosso problema utilizzando int()
Infatti funziona perfettamente. Ti conviene abbandonare la round2().pymsoft wrote:Enrico,
http://forums.fivetechsupport.com/viewt ... ound+error
magari hanno risolto (sicuramente) nelle versione successive di xharbour
EMG