Newsgroup: it.comp.appl.access
Titolo: Raggruppamenti e decimali

Ho una tabella in cui un campo č definito a precisione singola. Inserisco
tutti dati con non piů di 2 decimali (la maschera di input taglia cosě!). Se
guardo nella tabella i dati hanno i decimali correti. Se faccio una SELECT
tutto a posto anche lě. Se invece faccio una query di raggruppamento e
faccio la somma su quel campo compaiono una sfilza infinita di decimai!!!
Voi direte: č dovuto alla gestione dei decimali da parte dell'OS! VA bene,
ma come me li cavo dalla palle? Se nel campo metto un Round viene
completamente ignorato!
Che devo fŕ?
Denghiu!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Che devo fŕ?
Precisione singola, eh?
Credo tu debba invocare una funzione globale che applichi la funzione CDec 
al campo single in oggetto.
Tipo:
Public Function XXX(Valore as single) as double
      XXX=CDec(Valore)
End Function
Se non ricordo male non č possibile invocare la funzione CDec direttamente 
nelle queries.

 nelle queries.
Cioè mi stai dicendo che se voglio fare una stupida somma con una query di
raggruppamento di 1.34 e 2.12, per ottenere 3.46 e non 3.46787478348583746
devo invocare una funzione VB?!?!?!?


 devo invocare una funzione VB?!?!?!?
Ti sto dicendo di moderare il tono: cerco solo d'aiutarti e non vengo pagato 
per questo.
La natura dei campi Floating Point (e le sorprese che possono dare) è comune 
a TUTTI i sistemi di programmazione.
O cambi tipologia di campo numerico o ti devi adattare.
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q210423
Saluti. 

 devo invocare una funzione VB?!?!?!?
sei tu che hai scelto un tipo di dato approssimato, quando si progetta una 
tabella bisognerebbe conoscere le caratterisctiche e i comportamenti dei 
tipi di dato che si intende utilizzare.
:-)
--
Giorgio Rancati
[Office Access MVP] 

 Saluti.
Ciao e grazie!
Ps: dai, non te la prendere, č stato solo un "quiquoqua"!!!


 :-)
Scusa, ma se mi serve un dato con dei decimali, 2 o 3, mai di più, che tipo
dovrei scegliere?


 dovrei scegliere?
ad esempio il tipo Valuta, tipo di dato non approssimato con max 4 decimali, 
idoneo per calcoli monetari.
Oppure, da Acc2000 in avanti, il tipo Numerico-->Decimale, tipo di dato non 
approssimato in cui puoi decidere il numero massimo di cifre totali e di 
queste il numero di decimali da gestire.
Ciao


 Ps: dai, non te la prendere, č stato solo un "quiquoqua"!!!
Nessun problema.
Ciao: Simone 



Azz, queste proprio mi mancavano.... OK con un Decimale/Euro a 3 decimali e
Decimale/NumeroGenerico a 2 decimali ho risolto tutto!!!
Grazie davvero!
E un grazie ancora anche a Simone!


 Grazie davvero!
umm..  non è molto chiaro cosa hai fatto, NumeroGenerico è il formato, il 
numero dei decimali da dove l'hai impostato ?
Il numero di decimali desiderati va impostato nella proprietà "Scala"
Le proprietà "Formato" e "Posizioni Decimali" non hanno nessuna influenza 
sul contenuto del campo perchè determinano solo la sua visualizzazione.


 sul contenuto del campo perchè determinano solo la sua visualizzazione.
Ops....
OK, corretto mettendo in Scala lo stesso valore riportato in NumeroDecimali.
Adesso dovrei stare a posto!


 sul contenuto del campo perchè determinano solo la sua visualizzazione.
Il problema del tipo "Decimal" è che non esiste (almeno con Access 2000/XP)
un tipo di variabile in VB corrispondente.
Tu che fai: la memorizzi in un Double con la CDec() ?
Ciao!

 Tu che fai: la memorizzi in un Double con la CDec() ?
e no, in questo modo ricaschi nel tipo di dato approssimato.
:-)


 Adesso dovrei stare a posto!
;-)


 :-)
M'intrometto per smentire   ;-)
Se applichi la funzione VB che ho postato ieri all'argomento Single nella 
Query, il risultato è perfetto.
Vero comunque che da "manuale" il Decimal è un sottotipo del Variant (c'è 
anche nell'Help mi pare).
Ciao: Simone 

 Query, il risultato è perfetto.
si ma se poi esegui delle operazioni aritmetiche sulla variabile Double 
ottieni sempre un risultato approssimato a meno di non usare per ogni 
operazione la conversione in Cdec()
Se al contrario le operazioni aritmetiche le esegui sulla variabile Variant 
non hai problemi.
esempio
----
'Poniamo che il valore 144 derivi da un campo decimal di un recordset
Dim varImporto As Variant
varImporto = CDec(144)
varImporto = varImporto - 143.7
Debug.Print varImporto
Dim dblImporto As Double
dblImporto = CDec(144)
dblImporto = dblImporto - 143.7
Debug.Print dblImporto
----
Risultati:
 0,3
 0,300000000000011


 esempio
Beh, sě: il CDec() nel caso di variabile Double si deve utilizzare in ogni 
operazione.
Perň il caso specifico oggetto del post era semplicemente 
Somma(<CampoSingle>) in Query Group By...
Ciao, Simone 

 Somma(<CampoSingle>) in Query Group By...
sě, ma poi Oscar ha sollevato il problema della variabile VB e vedendo la 
tua ultima frase
----
Vero comunque che da "manuale" il Decimal č un sottotipo del Variant (c'č
anche nell'Help mi pare).
----
pensavo che anche tu ti riferissi alle variabili VB
:-)


 e no, in questo modo ricaschi nel tipo di dato approssimato.
Beh, grazie per i ragguagli: non avevo mai utilizzato i Decimal...
Ciao!