Newsgroup: it.comp.lang.visual-basic
Titolo: Arrotondamento (non decimale)

Come posso arrotondare dei prezzi alla 3 cifra ? (Es. 15000 anzicchè 14789)
--
Ciao
Flex

 ha scritto nel messaggio
news:8br8cm$p2v$1...@pegasus.tiscalinet.it...

Dunque la risposta e'... dipende..... con 14749 come ti comporti ??
approssime sempre per eccesso o anche per difetto ??
ecco una semplice funzione che dovrebbe cmq funzionare in ogni caso e
dipende dal tuo fattore di approssimazione :
Dim lApprossimazione as Long    'Fattore di approssimazione
Dim lOldVal as Long      'Valore da approssimare
Dim lNewVal as Long    'Valore approssimato
lApprossimazione = 100
lNewVal = ((lOldVal + lApprossimazione - 1) \ lApprossimazione) *
lApprossimazione
in questo esempio approssimi sempre per eccesso alla 3a cifra
non l'ho provata... spero di non aver scritto boiate..... ;o)
Ciao
Ven.

> Come posso arrotondare dei prezzi alla 3 cifra ? (Es. 15000 anzicchč
14789)
Uno dei primi pezzi di codice che scrissi (e che me lo porto dietro da anni
xche' funzionante)
ho una routinetta che esegue uno sconto e arrotonda il prezzo alla terza
cifra!!!
Spero che possa servire !!!
'*******************************************************************
'** Esegue lo sconto                                              **
'*******************************************************************
Private Sub EseguiSconto()
Dim IntTemp As Long
Dim IntTemp_3 As Long
Dim StrIntTemp As String
Dim strTemp_3 As String
    IntTemp = Text2.Text
    If ScontoPerc = 0 Then
        InSconto = False
        Exit Sub
    End If
    If IntTemp < 1000 Then GoTo ArrotondatoOK
    'Applico lo sconto
    IntTemp = IntTemp - (IntTemp / 100 * ScontoPerc)
    'Arrotondo alle 500 lire
    StrIntTemp = IntTemp
    If Len(StrIntTemp) > 3 Then
        strTemp_3 = Right(StrIntTemp, 3)
        IntTemp_3 = strTemp_3
    Else
        IntTemp_3 = StrIntTemp
    End If
    If IntTemp_3 < 250 Then
        IntTemp = IntTemp - IntTemp_3
        GoTo ArrotondatoOK
    End If
    If IntTemp_3 >= 250 And IntTemp_3 < 750 Then
        IntTemp = IntTemp + (500 - IntTemp_3)
        GoTo ArrotondatoOK
    End If
    If IntTemp_3 >= 750 Then
        IntTemp = IntTemp + (1000 - IntTemp_3)
        GoTo ArrotondatoOK
    End If
ArrotondatoOK:
    Text2.Text = IntTemp
End Sub
--
Ciaps
Stracca
---------------------------------------------
    Le risposte alle tue domande le trovi
    sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
       ... e nell'help in linea !
---------------------------------------------

 14789)
Dim c as Currency (o quello che ritieni piu' opportuno...)
Format(c, "0,") * 1000
oppure
Format(c / 1000, "0") * 1000
ma, se vuoi, potresti testare anche il codice seguente. Non ho verificato se
fa quello che dovrebbe, cioe' avere un comportamento corrispondente a quello
delle funzioni di excel:
Option Explicit
Sub Main()
Dim c   As Currency
Dim c1  As Currency
Dim c2  As Currency
Dim c3  As Currency
Dim n   As Integer
Dim p   As Single
  Let c = 14000@
  Debug.Print "c  = "; c
  Let c1 = Format(c, "0,") * 1000
  Debug.Print "c1 = "; c1
  Let n = 3
  ' ARROTONDA
  Let c1 = Sgn(c) * Format(Abs(c) / 10 ^ n, "0") * 10 ^ n
  ' ARROTONDA.PER.DIF
  Let c2 = Sgn(c) * Format(Abs(c) \ 10 ^ n, "0") * 10 ^ n
  ' ARROTONDA.PER.ECC
  Let c3 = Sgn(c) * Format((Abs(c) + 10 ^ n) \ 10 ^ n, "0") * 10 ^ n
  Debug.Print "c1 = "; c1
  Debug.Print "c2 = "; c2
  Debug.Print "c3 = "; c3
  Let p = 200
  ' ARROTONDA.MULTIPLO
  Let c1 = Format(c / p, "0") * p
  ' ARROTONDA.DIFETTO
  Let c2 = Format(c \ p, "0") * p
  ' ARROTONDA.ECCESSO
  Let c3 = Format((c + p) \ p, "0") * p
  Debug.Print "c1 = "; c1
  Debug.Print "c2 = "; c2
  Debug.Print "c3 = "; c3
End Sub
--
Ciao.
Maurizio