Newsgroup: it.comp.appl.access
Titolo: arrotondamento?

Salve a tutti.
vorrei far arrotondare dei calcoli ad access.
Ad esempio     L. 23.437 -> L. 23.500
                        L. 43.723-> L. 44.000
e cosi via.
Possibile che access non ha una funzione di arrotondamento o sono io che non
la trovo?
Giancarlo

"Giancarlo Leccese" <glecce...@QUESTOlibero.it> ha scritto nel messaggio
news:Sodt7.4499$C15.1...@news.infostrada.it...

Non solo Access ma nessun foglio di calcolo.
Se vuoi arrotondare a 500 o a 1000 devi costrurti una funzione del tipo:
ho scritto a braccio ma dovrebbe funzionare
Public Function Arrotonda(dblValore)
    Dim intermedio
    intermedio = dblValore Mod 500
    If intermedio = 0 Then
    Arrotonda = dblValore
    Else
    Arrotonda = dblValore + (500 - intermedio)
    End If
End Function
Approfitto per postare anche una funzione che arrotonda correttamente
l'Euro.
Ricordo che secondo le vigenti disposizioni si arrotonda la seconda cifra
decimale solo in presenza della terza cifra decimale.
Se Federico Luciani ritiene utile la funzione gli sarei grato se volesse
pubblicarla sul SC.
Public Function ArrotondaEuro(dblValore)
    dblValore = (dblValore * 100) + 0.5
    If InStr(CStr(dblValore), ",") <> 0 Then dblValore = Int(dblValore)
    ArrotondaEuro = dblValore / 100
End Function
Ciao, Carlo

 ha scritto nel messaggio
news:uAft7.4883$C15.1...@news.infostrada.it...

Al solito premetto che sono un profano, ma immettendo la parola ARROTONDA
nell'help di access mi è venuta fuori la funzione ROUND che sembra proprio
ciò che cerchi! Se il problema consiste nel fatto che lì puoi specificare
solo a quale posizione decimale arrotondare, mentre tu vuoi arrotondare, per
esempio, alle centinaia, la soluzione è semplice: basta che tu divida il
numero per cento, faccia arrotondare alle unità e poi lo moltiplichi di
nuovo. Ad esempio:
23.437 --( /100)--> 234,37 --( ROUND senza specificare il numero di cifre
decimali)--> 234 --( *100)--> 23.400
E il gioco è fatto.
Ovviamente sto parlando di Access2000: potrebbe non esserci in versioni
precedenti, anche se mi sembra strano perchè in VB c'è sempre stata...
Ciao
P.S. Per inciso osservo che non è vero che i fogli di calcolo non hanno tale
funzione: EXCEL ad esempio non solo ce l'ha, ma impostando una posizione
decimale negativa si pùo ottenere arrotondamento alle decine, alle
centinaia, ecc... senza usare il trucchettino che ho scritto sopra.

 ha scritto nel messaggio
news:9p4iu7$s1c$1...@nreada.inwind.it...

Infatti in excel uso tali funzioni regolarmente.
La funzione round avevo gia provato ad usarla senza riuscire ad avere quello
che cerco.
Ora provo i vostri suggerimenti.
Grazie
Giancarlo

 ha scritto nel messaggio
news:9p4iu7$s1c$1...@nreada.inwind.it...



 Ciao, Carlo
Credo ci sia gia' qualcosa, cmq la prendo giu' e ci guardo.
Grazie
-- 
Federico
----------------------------------
Rimuovi paperino. per e-mail
----------------------------------
Tutte le richieste che arrivano
in privato, vengono cestinate.
----------------------------------
Sito Comune di it.comp.appl.access
http://www.sitocomune.com
mailto:
webm...@sitocomune.com
----------------------------------

 ha scritto nel messaggio
news:9p4iu7$s1c$1...@nreada.inwind.it...

Excel ha "Arrotonda per Eccesso".
Solo Access dalla versione 2000 ha Round ma solo per le cifre decimali. Qui
si vuole arrodondare alle 500.
Comunque la funzione postata fà esattamente quello che Giancarlo voleva.
Ciao, Carlo

 Ora provo i vostri suggerimenti.
La funzione "Round()" di VBA6+ (nel VBE6x.dll --> Office00, OfficeXP)
non č la stessa cosa che la (piů vecchia) funzione Round nei spreadsheets
di Excel (dal Excelx.olb). Sono diverso anche nel sistema di arrotondamento.
La funzione spreadsheet arrotonda corettamente in senso commerciale.
Questa di VBA usa un arrotondamento di banca americano č cosě non
vale per niente. p.e. Round(1.085, 2) --> 1.08
http://support.microsoft.com/support/kb/articles/Q225/3/30.ASP
--
HTH
Karl
*********
Access-FAQ (tedesco): 
http://www.donkarl.com

 Credo ci sia gia' qualcosa, cmq la prendo giu' e ci guardo.
Sě ce qc. ;-)
La funzione di soppra debb' essere assicurato da valori negativi.
Ha un problema se hanno un 5 come terza cifra decimale p.e.
?ArrotondaEuro(-1.045)
-1,04


 ha scritto nel messaggio
news:9p4shr$g53aj$2...@ID-46617.news.dfncis.de...

Grazie Karl.
La funzione non prevedeva infatti i numeri negativi.
Pertanto va corretta in:
Public Function ArrotondaEuro(dblValore)
    If dblValore < 0 Then
    dblValore = (dblValore * 100) + 0.4
    Else
    dblValore = (dblValore * 100) + 0.5
    End If
    If InStr(CStr(dblValore), ",") <> 0 Then dblValore = Int(dblValore)
    ArrotondaEuro = dblValore / 100
End Function
Prego Federico Luciani di provvedere alla correzione.
Ciao, Carlo

 End Function
?ArrotondaEuro(-1.0444)
-1,05
Arrotondamento veramente è una cosa difficile. ;-)
--
cu


 ha scritto nel messaggio
news:H3mt7.8165$C15.1...@news.infostrada.it...

Lo so che ROUND funziona solo per i decimali, ma come ho scritto se dividi
per 10, 100, 1000, arrotondi e poi rimoltiplichi ottieni esattamente il
risultato voluto con poco ingrullimento!
Ciao

 Sě ce qc. ;-)
e gia' ;-)


 Prego Federico Luciani di provvedere alla correzione.
Ho controllato, ed infatti c'e' una funzioncina di Karl ;-))
Function fctRound(varNr, Optional varPl = 2) As Double
' by Konrad Marfurt + ? + Karl Donaubauer
'varNr: numero da arrotondare
'varPI: numero di decimali (due predefinito)
   fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10
^ varPl)
End Function



Ciao,
--
Alberto