Newsgroup: it.comp.lang.delphi
Titolo: Currency e arrotondamenti

Ho una domanda un pò noiosa da leggere ma ci provo lo stesso.
Magari qualcuno ha già avuto questa esigenza...
Delphi 7.
Ho un valore currency di 31.50
Lo devo dividere in tre parti percentuali, poniamo 33%, 33%, 34% che mi
restituiscono 10.40, 10.40, 10.71. La loro somma ritorna 31.51 utilizzando
due decimali, 31.50 utilizzandone tre.
Io però devo utilizzare per forza due decimali quindi quando mi trovo di
fronte ad un caso del genere devo (dovrei) poter decidere quali valori
finali arrotondare per difetto e quali per eccesso per ottenere dalla loro
somma il valore iniziale.
Non sarebbe un problema intervenire da codice ma qui mi trovo in difficoltà:
se faccio:
var a,b,c,d : currency
a := 10.40;
b := 10.40;
c := 10.71;
d := a+b+c
ottengo d = 31.51
ma se i valori li ottengo dinamicamente ho (in debug)
a = 10.395
b = 10.395
c = 10.71
la cui somma è 31.50
(tali valori "finiscono" nelle TEdit con FormatCurr e [a e b] diventano
10.40)
e dunque non potendo rilevare che la somma dei tre currency a due decimali
non restituiscono perfettamente il currency "sorgente" non posso intervenire
a decrementare o incrementare.
Per chi ha la voglia e la costanza di rileggere una seconda volta  :-)
Vi viene in mente qualcosa?
Ciao
Valter

 a decrementare o incrementare.
Sicuro che non lo puoi rilevare?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 31,50
Praticamente si, ma matematicamente non ha soluzione...d'altra parte si
parla di divisioni e se due decimali non bastano ti resta...il resto :-)
O passo a 3 o 4 decimali (ma non mi piace) o devo trovare il modo di
intervenire sui numero finali...
vedo se è possibile stabilire quanti decimali diversi da zero sono presenti
in un dato currency o altrimenti lavorerò sulla stringa risultante da
FormatCurr con Length, Pos e compagnia bella...
Grazie
Valter

 ha scritto nel messaggio 
news:SiqYf.48780$nz4....@tornado.fastwebnet.it...

Sommi i tre risultati.
Se il totale è diverso dal numero da cui sei partito, togli o aggiungi 
all'ultimo numero la differenza.
10,40
10,40
10,71
-----
31,51
31,51 - 31,50 =  0,01
10,71 - 0,01 = 10,70
10,40
10,40
10,70
-----
 31,50
Matematica, niente di più !
Ciao
Marco

 Matematica, niente di piů !
bisognerebbe prima fare delle prove...  :-)
limitandosi a leggere il valore del currency a runtime, come detto nel post
iniziale, purtroppo il ragionamento non va a buon fine (pensavo anch'io
fosse cosě semplice)...i valori generati sono
10.395
10.395
10.71
e se ne fai la somma, sempre dinamicamente, ti ritorna esattamente
31,50...ma non appena riponi i valori in una TEdit con
FormatCurr('#,##0.00', var) ecco che ti ritrovi:
10.40
10.40
10.71
la cui somma č ovviamente 31,51
Ad ogni modo ho risolto cosě:
anzichč leggere i valori generati dal programma, che in ragione della
divisione mi restituisce tre decimali, aspetto il riempimento dei TEdit che
"costringe" il currency a due decimali e relativo arrotondamento, ne
recupero i valori con StrToCurr e ne faccio la somma...ecco che finalmente
ottengo 31,51 e quindi proseguo come puoi immaginare.
Grazie
Ciao
Valter

 anzichè leggere i valori generati dal programma, che in ragione della
