Newsgroup: it.comp.appl.access
Titolo: Valori anomali in campo numerico

Ho un file di primanota in un DB su sql server 2005 che contiene circa
200.000 record ed una cinquantina di questi ha dei valori anomali come
i seguenti:
10482,919999999998
1283,3400000000002
13151,810000000001
Questi valori vengono evidenziati nelle maschere in modo normale come
segue.
10482,92
1283,34
13151,81
L'anomalia la si trova solo scorrendo la tabella del database.
Inoltre la quadratura dei conti calcolata sul medesimo campo non da
differenze.
Il campo è di tipo float.
Qualcuno ha già approfondito/incontrato questo problema?
Marco D

 Qualcuno ha gi� approfondito/incontrato questo problema?
Colpa del floating point, non c'� rimedio.
Usa il vartype decimal o currency.
Puoi provare a farti una copia della tabella e convertire
i campi interessati da double/single a currency (per la
contabilit� � quel che ci vuole, ti consente fino a 4 decimali).
Bruno 

 - Mostra testo citato -
Ho immaginato fosse un problema collegato al tipo di campo.
Per ora penso di creare un programmino che mi riordini quei campi
anomali.
Mi sembra un pò pericoloso modificare il tipo di campo.
Grazie mille Bruno
Marco D.

 Grazie mille Bruno
Ti sembra un po' pericoloso fare la modifica su una
copia del database?
Hai paura che ti scoppi il computer?
Bruno 

    
Cmq � molto pi� pericoloso gestire dati contabili, magari fiscali su 
dati float che � un tipo di dato approssimativo per antonomasia.
Ciao
Daniele

 - Mostra testo citato -
Ho notato un po di incongruenze in quanto mi dite.
I tipi di dati currency, double, single non esistono su SQLServer.
Il campo di tipo float è considerato in SQL Server come l'equivalente
del tipo doble di Vba (vedasi help online di SQL Server).
Non caposco perchè il tipo di campo float sia considerato non
attendibile per i dati contabili. Forse lo è per quei tipi di calcolo
dove la precisione deve essere estrema, ma non per i dati contabili
che al massimo hanno due decimali.
Dove stò sbagliando?
Marco D.

    
Il problema non � la quantit� dei decimali a disposizione quanto la 
qualit�. Esempio con float 10,12 ti diventa 10,1112559999 oppure 
10,11212215425 o che ne so. Poi la form te la presento round � un altro 
discorso.
Questo � l'aelatorio float 
http://msdn.microsoft.com/it-it/library/ms173773.aspx
 e questo � il 
money 
http://msdn.microsoft.com/it-it/library/ms179882.aspx
Ciao.

 - Mostra testo citato -
Uso da diverso tempo il tipo di campo Float e non mi ha mai dato
problemi, tra l'altro anche in versioni di SQl Server precedenti.
Ho provato ad utilizzare il tipo Real ma ho avuto diversi problemi, mi
arrodondava i valori decimali.
Dato che in VBA di Access uso i valori Double e single, mi trovo molto
bene nell'archiviare tali dati nel tipo Float di SQL Server.
Il tipo di dato Money è arrotondato al millesimo e quindi ha un
arrotondamento superiore all'arrotondamento del tipo float.
10,12  al massimo è arrotondato così :  10,119999998 o  10,120000002
Marco D.

    
Non lo dico io ma se leggi su ms che ricito "Tipi di dati numerici 
approssimati da utilizzare con dati numerici a virgola mobile. I dati a 
virgola mobile sono approssimati. Pertanto, non tutti i valori 
nell'intervallo del tipo di dati possono essere rappresentati in modo 
esatto." Hai letto il link?
Se ti va bene questo compromesso � una tua scelta.
Ma personalmente non mi sognerei mai di mettere in un giornale iva 
fiscale un dato float o real che va bene per le statistiche e per 
risparmiare spazio sulle tabelle.
Alla prossima
Daniele

 
il float e' arrotondato, il money no; ha una precisione al decimillesimo, 
ma questo non c'entra niente con l'arrotondamento dei dati che contiene.
nel campo money metti un valore e il sistema registra quel valore, per 
ripresentartelo identico quando lo leggi; nel campo float inserisci un 
valore e il sistema salva un valore il piu' vicino possibile a quello che 
hai inserito, ma non necessariamente quello che hai digitato.
quando vai a leggeere il campo float, il sistema ti restituisce il valore 
che ha registrato e che, come detto, non necessariamente e' quello che hai 
digitato ('malfunzionamento' che hai riportato nel tuo post d'apertura)
i contabili digitano un valore e vogliono che sia registrato quello.
con un float non puoi, per definizione, garantirglielo.
cit da 
http://msdn.microsoft.com/it-it/library/ms173773.aspx
"Tipi di dati numerici approssimati da utilizzare con dati numerici a 
virgola mobile. I dati a virgola mobile sono approssimati. Pertanto, non 
tutti i valori nell'intervallo del tipo di dati possono essere 
rappresentati in modo esatto."
inserisci un valore ma non hai la garanzia che sia rappresentato in modo 
esatto.
usi quel valore per calcolare $oldi?
in bocca al lupo ^^
-- 
Paolo opg
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--

 - Mostra testo citato -
Ho fatto una prova, la seguente:
In una fattura devo trasformare il prezzo di un articolo da Sterline
in euro.
Il prezzo è 1,5 sterline il cambio è 0,875
Il valore in euro è  1,71428571428571428571428571 con 142857
periodico.
Ora vado a scrivere il valore in euro in un campo money di sqlserver e
lo stesso valore in un campo float sempre di sqlserver.
Rileggo i due campi  e ottengo:
dal campo money     1,7143
dal campo float         1,71428571428571
Come si nota, il campo più arrotondato è il campo money, il campo
float è quello più vicino alla realta.
Inoltre ho fatto eseguire al programma l’operazione di scrittura e
lettura 10.000 volte e tutte le volte ho ottenuto il medesimo
risultato.
Qualche dubbio?
Marco D

 
...dovresti fartelo venire
rileggi la documentazione microsoft.


 > float è quello più vicino alla realta.

Il tuo esempio non ha senso, io non uso sql per fare i calcoli, uso
access e quindi double e single.
Il float lo uso solo come archivio dei dati.
Capitoooo...
Marco D

 
in bocca al lupo


 wrote:

Ogni tanto ho la testa dura, però ho capito di sbagliare.
Ho provato a trasformare tutti i campi del mio Db da float in decimal,
ma la cosa non funziona(non supportato in access e le Dsum danno
valori errati).
Ho quindi optato per il money che però mi fa modificare molte caselle
di testo dove viene evidenziato il segno dell'euro.
In Vba l'unico tipo di campo utilizzabile per valori monetari è il
currency o il variant?
Grazie infinite Paolo.
Marco D

    
Cuurency
Cmq i due siti che ti ho indicato dovevano gi� convincerti da un pezzo...
Alla prossima
Daniele