Newsgroup: it.comp.lang.delphi
Titolo: Numero decimali

Oggi ho scoperto una nuova cosa. Spero che non sia vero ciò che sto
scrivendo e che qualcuno mi dia una dritta subito.
In una piccolo software da me creato gestisco importi decimali. Mi sono
accorto che il tipo di dato Currency, di default arrotonda al 4° numero
decimale. Com'è possibile una cosa del genere?
Sull'help ho trovato la proprietà CurrencyDecimals a cui è possibile
assegnare un tipo di dato byte. Ho provato a settarla a 10 ed a far eseguire
successivamente una moltiplicazione a un tipo di dato Currency per provare
se mi venissero restituiti + di 4 decimali ma niente(naturalmente ho
controllato che su una calcolatrice normale il risultato della
moltiplicazione è un numero con + di 4 decimali).
Qualcuno mi sa dire come risolvere questo problema?
Spero che non mi confermiate che ci sia veramente questo limite per il tipo
di dato Currency!
Nel mio software ho utilizzato sin dalla prima unit il tipo di dato Currency
perchè, chiedendo al newsgroup, avevo sentito dire che è ideale per gli
importi. Ora ho notato sull'help che ci sono altri tipi di dati che a
differenza del Currency riescono a tenere più di 4 decimali. Il problema è
che non so quale scegliere tra il Comp(l'help dice che non può essere
incrementato e decrementato quindi non andrebbe bene), Extended, real,
double, single. Per un programma gestionale voi cosa usereste? Qual'è il
tipo di dato che accetta numeri grandi con più decimali? Mi interesserebbe
sapere anche la funzione da utilizzare per convertire il tipo di dato
consigliato in stringa per poterlo visualizzare correttamente all'utente e
come leggerlo/scriverlo nel campo del database(la dichiarazione nel database
è decimal(12,4) ma per scriverlo e leggerlo dovrei utilizzare AsDecimal o
AsFloat o....).
Grazie ancora per la vostra collaborazione.

 e come leggerlo/scriverlo nel campo del database ma per scriverlo e
leggerlo dovrei utilizzare > AsDecimal o AsFloat o....).
.AsCurrency
Ciao.
Gianluca

Il tipo Currency ha precisione fino a 4 decimali.
Per avere il risultato che ti interessa devi usare una variable di tipo
double
Esempio
procedure TForm1.Button1Click(Sender: TObject);
var a,c:currency;
    b:double;
begin
  a:=10000;
  b:=10.12345;
  c:=a*b;
  Label1.Caption:=CurrToStr(c);
end;
Ciao
Marco
Reporter Professional srl
supp...@reporterprofessional.it

decimale. Com'è possibile una cosa del genere?
Ci sono alcuni gestionali che hanno una base dati dove
i campi importo hanno un numero maggiore di decimali.
Esempio il zucchetti, sul quale ho fatto personalizzazioni, ha il campo 
prezzo dell'archivio articoli definito come decimal 20,7.
Questo e' stato messo per gestire un'informazione che andrebbe altrimenti persa: ad esempio
nelle attivita' dove si vendono articoli dal costo bassissimo tipo panetterie,ferramenta, ecc...
Ora, se la tua base dati è decimal(12,4), hai una profondità molto maggiore
che quando si usava la lira sulla *stessa base* dati.Facendo infatti il cambio Euro->Lira:
10,4321 Euro ---> 20199,362267 Lire
Comunque, visto che il Currency non ti offre piu' di 4 decimali, puoi sempre
usare il tipo double aggiustato all'atto del salvataggio con un bel RoundTo.
Ciao
Morde.
morde [at] programmer [.] net