Newsgroup: it.comp.appl.access
Titolo: Arrotondamento...

Salve a tutti.
Ho un problema di arrotondamento su de prezzi. Mi spiego meglio
Se un capo costa 30,90 euro ed il lo sconto del 15% mi viene fuori 26,265
Euro. Come faccio ad arrotondare a 26.25?
Io vorrei arrotondare quando faccio lo sconto ai 5 centesimi.
Esempio:
35.33 -> 35.30
35.38 -> 36.40
35.95 -> 35.95
ecc..

"Giancarlo" <glecce...@QUESTOlibero.it> ha scritto nel messaggio
news:agbt9.19221$aL4.5...@news1.tin.it...

Perchè 35.33 lo arrotondi per difetto mentre 35.38 lo arrotondi per eccesso
quando 35.95 rimane tale?
Trova una regola e poi guarda il post "arrotonda a 6" di Zappus del 21/10
ore 21.17
Dai un'occhiata anche alla funzione di Karl sul sito comune per
l'arrotondamento.
Ciao, FABIO

 ha scritto nel messaggio
news:xMbt9.62636$%M1.16...@twister2.libero.it...

Vorrei questa regola:
da 1 a 4 arrotondamento per difetto
5 rimane cosi
da 6 a 9 arrotonda per eccesso

 da 6 a 9 arrotonda per eccesso
    Allora non si spiega perche' volevi arrotondare 26,265 a 26,25!
    Hai cambiato idea?
    Comunqe...
        Format$(numero, "0.00")
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

         Format$(numero, "0.00")
Sei sicuro? Cosě ti arrotonda solo alla 2 cifra decimale (tralaltro il 5 lo
arrotonda per eccesso) ma non fa quello che vuole lui.
Fabio

"Giancarlo" <glecce...@QUESTOlibero.it> ha scritto nel messaggio
news:kVbt9.19399$aL4.5...@news1.tin.it...

Se questa è la regola (che però non è un arrotondamento ai 5 centesimi
prossimi), prova con
=IIf(([Prezzo]*10-Int([Prezzo]*10))<0,5;(Int([Prezzo]*10))/10;IIf(([Prezzo]*
10-Int([Prezzo]*10))=0,5;[Prezzo];(Int([Prezzo]*10))/10+0,1))
che in VBA sarebbe:
If (Prezzo*10-Int(Prezzo*10)) < 0.5 Then
    PrezzoArr = (Int(Prezzo*10))/10
Else
    If (Prezzo*10-Int(Prezzo*10)) = 0.5 Then
        PrezzoArr = Prezzo
    Else
        PrezzoArr = (Int(Prezzo*10))/10+0,1
    End If
End If
In questo caso però 26,265 , per questa nuova regola, è uguale a 26,30 e non
uguale a 26,25 come dicevi prima tu.
Per un arrotondamento ai 5 centesimi prossimo, prova con:
=IIf(([Prezzo]*10-Int([Prezzo]*10))<0,3;(Int([Prezzo]*10))/10;IIf(([Prezzo]*
10-Int([Prezzo]*10))<0,8;(Int([Prezzo]*10))/10+0,05;(Int([Prezzo]*10))/10+0,
1))
Che in VBA sarebbe:
If (Prezzo*10-Int(Prezzo*10)) < 0.3 Then
    PrezzoArr = (Int(Prezzo*10))/10
Else
    If (Prezzo*10-Int(Prezzo*10)) < 0.8 Then
         PrezzoArr = (Int(Prezzo*10))/10+0,05
    Else
        PrezzoArr = (Int(Prezzo*10))/10+0,1
    End If
End If
Naturalmente, per non avere problemi i campi ingioco debbono essere tutti a
doppia precisione.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 lo arrotonda per eccesso) ma non fa quello che vuole lui.
    Boh? Non capisco. Ma secondo te a quante cifre decimali vuole
arrotondare? Vabbe' aspetta che vado a vedere l'altro post...
    Hai ragione, aveva scritto:
        35.33 -> 35.30
        35.38 -> 36.40
        35.95 -> 35.95
e io non ci avevo piu' badato. Allora prova 'sto giochino (visto che cmq una
soluzione mi sembra sia gia' stata proposta):
Public Sub RoundDM_Test()
  Dim i As Double
  For i = -25.45 To -25.24 Step 0.01
    Debug.Print i, RoundDM(i)
  Next
  Debug.Print 0, RoundDM(0)
  For i = 25.25 To 25.46 Step 0.01
    Debug.Print i, RoundDM(i)
  Next
  Debug.Print
End Sub
Public Function RoundDM( _
  ByVal Number As Double _
) As Double
  RoundDM _
    = Format$( _
          Right$(Format$(Number, "0.00"), 1) = "5" _
        , """" & Format$(Number, "0.0\0") & """" _
        & ";" _
        & """" & Format$(Number, "0.00") & """")
End Function
