Newsgroup: it.comp.appl.access
Titolo: Funzione di Karl

Datemi un pugno telematico...
ma in Access 2000
fctround(1,025)=1,02 caz
fctround(1,035)=1,03 caz
fctround(1,055)=1,05 caz
fctround(1,125)=1,13 beh
La funzione di Carlo Costarella invece...
ArrotondaEuro(1,025)=1,03 beh
ArrotondaEuro(1,035)=1,04 beh
ArrotondaEuro(1,055)=1,05 caz
ArrotondaEuro(1,125)=1,13 beh
Ragazzi sono sicuro di aver sbagliato 
qualcosa... 
ditemi dove ho fatto la caz...a
P.S. La funzione Round invece non ne azzecca una, 
ma di queste Karl aveva gia' dato le varie ipotesi.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

ma di queste Karl aveva gia' dato le varie ipotesi.
INNANZITUTTO NON TOCCARE KARL
poi usi questa funzione?
Function arrotondaeuro(varNr, Optional varPl = 2) As Double
' by Konrad Marfurt + ? + Karl Donaubauer
'varNr: numero da arrotondare
'varPI: numero di decimali (due predefinito)
varNr = Nz(varNr, 0)
arrotondaeuro = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) /
(10 ^ varPl)
End Function
questa a me funziona con 1,055
Saluti.
Emanuele.

 ha scritto nel messaggio
news:3aadbe5e8ae1015cf3f...@mygate.mailgate.org...

mmm....una signora!
---
leo_duca

 ma di queste Karl aveva gia' dato le varie ipotesi.
Mi sembra che non sai di che cosa parli.
--
HTH
Karl
*********
Access-FAQ (tedesco): 
http://www.donkarl.com

 P.S. La funzione Round invece non ne azzecca una,
CUT
In che senso?
Sib

Intanto grazie per non esservi stancati di 
rispondere a queste menate degli arrotondamenti... 
Intanto ho risolto l'arcano.
I dati vengono da una tabella dove ho memorizzato quei valori 
che tempo fa Karl mi aveva suggerito per spiegarmi dove 
la funzione round sbaglia.
I valori sono appunto:
1.025
1.035
1.055
1.125
In una query applico poi la funzione di Karl che ho memorizzato in 
un modulo.
Se nella tabella come tipo di dati metto "Numerico" nella query 
vengono fuori quei dati sbagliati.
Mettendo invece come tipo di dati "Valuta" (non come formato...) 
tutto funziona a meraviglia.
Mi metto in atteggiamento tattico per ricevere quei pugni 
telematici che dicevo piu' sopra...
Per quanto concerne la funzione Round e' chiaro che gli 
errori sono quelli che gia' diceva Karl, ma con la caz...a che 
ho fatto di mettere come tipo di dati "numerico", gli errori 
si amplificano.
Se qualcuno ha ancora voglia di rispondere e mi conferma 
o sconferma (...) quello che ho trovato, faccio ammenda per 
tutte le caz...e che ho fatto e mi preparo per la prossima 
domanda...
ciao a tutti e grazie
P.S. Nel mio programma come ho gia' detto ho 
usato la funzione di Karl ormai da tempo, e naturalmente nelle 
tabelle come tipo di dati avevo usato "Valuta".


 leo_duca
...mmm ... perche' tu saresti un Duca??
ciao ciao


 domanda...
Per me solo "le varie ipotesi" non hanno piacuto perché non é vero.
Questo che ho detto qui sulla funzione Round() di VBA non sono
le miei ipotesi ma il comportamente come documentato da MS p.e.
OFF2000: New Round Function in Visual Basic for Applications 6.0
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q225330
PRB: Round Function different in VBA 6 and Excel Spreadsheet
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q194983
L'unica cosa che ho scritto più che il KB è che la funziona Round()
ha problemi anche con Double e per questo è solo fidato (in senso
che è documentato) se si usa il tipo Valuta. Ma è una cosa semplice
a provare p.e. con un Round(1,035;2)--> 1,03 di un Double.
In genere non ho problemi con il dubbio.
Credo che non ce una singola cosa nel mondo senza errore.
Esistono solo cose senza (finora) una prova di un errore.
In questo sono un fan di Karl Popper.
BTW Ho visto che hanno cambiato la funzione al sito comune
in un modo che non mi piace. Debbo inviare un mail.



Ducale e' il nome dell'azienda per cui lavoro
nonostante cio' non mi vien proprio di intercalare con caz ad ogni frase
---
leo_duca

 Emanuele.
Si uso proprio quella, comunque adesso funziona, ho sbagliato 
il "Tipo di dato"; al posto di "valuta" inserivo "numerico".
Se leggi i post successivi troverai le spiegazioni più 
dettagliate di Karl.
Comunque la funzione di Karl la uso da tempo, solo che ho voluto 
fare delle prove e mi sono incartato...
ciao e grazie


 Sib
Anche qua naturalmente l'errore stà nel "tipo di dato" che ho 
inserito come numerico (aggravato da precisione semplice) che ha 
portato gli errori.
Gli errori della funzione Round leggeteli dai messaggi di Karl 
dove vengono spiegati più precisamente.
ciao ciao



Ma allora non ti chiami Rossella Capra, ma Rossello Capretto!! :-)
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

ciao e grazie
volevo ben dire Karl non sbaglia mai
Saluti.
Emanuele.


OK...sei guarito!! :)
---
leo_duca

 dove vengono spiegati più precisamente.
Il problema e' abbatanza ovvio e soprattutto esiste da quando e' stata
inventata la numerazione binaria.
Ti ricordo l'atavico inconveniente:
I numeri decimali, una volta trasformati in binario, risultano spesso
periodici.
Ad esempio, il numero segnalato da Karl:
1,035
in binario e':
1,000(01000111101011100001)
dove la parte tra parentesi e' periodica.
In sostanza tu scrivi 1,035 e il relativo numero double e' 1,0349999999...
Se fai la prova con un codice come questo:
    Me.b = Int(Me.a * 100) / 100
    If (Me.a * 100) - Int(Me.a * 100) >= 0.5 Then
        Me.b = Me.b + 0.01
    End If
Vedrai che ti da lo stesso problema.
Invece la funzione format funziona perfettamente
=Format([TuoCampo];"Fisso")
Sib