Newsgroup: it.comp.lang.visual-basic
Titolo: Arrotondamento Cifre Decimali in VB6.

Salve ho da arrotondare delle cifre decimali x eccesso.
Faccio un es.:
21,23 --> 21,30
12,30 --> 12,30
4,11 --> 4,20
3,99 --> 4,00
..e cosě via.
Qualcuno sa darmi delle delucidazioni su come riuscirci?...
Grazie,
TG.

 ha scritto nel messaggio 
news:469c5cf1$0$17950$4faf...@reader1.news.tin.it...


 ha scritto nel messaggio 
news:X7Zmi.544$BM....@tornado.fastwebnet.it...


 Cè un modo possibile?
Io non conosco VB6, ma con 
VB.NET
 avevo fatto così:
' d è il valore da arrotondare
' i è il numero di decimali
Function Eccesso(ByVal d As Double, ByVal i As Integer) As Double
Return Math.Truncate(d) + (Math.Ceiling((d - Math.Truncate(d)) * 
Math.Pow(10, i))) / Math.Pow(10, i)
End Function
Vedi se riesci a trovarti tu le istruzioni corrispondenti :-)
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 ha scritto nel messaggio 
news:469c6479$0$17943$4faf...@reader1.news.tin.it...


Prova cosě
'-------------------------------------------------------------------------------
Function ArrotondaPerEccesso(ByVal numeroDecimale As Double) As Double
Dim numeroTroncatoDueDecimali As Long
Dim ultimaCifra As Long
    numeroTroncatoDueDecimali = Fix(numeroDecimale * 100)
    ultimaCifra = CLng(Right$("" & numeroTroncatoDueDecimali, 1))
    Dim arrotondamento As Long
    If ultimaCifra > 0 Then
        arrotondamento = 10 - ultimaCifra
    End If
    numeroTroncatoDueDecimali = numeroTroncatoDueDecimali + arrotondamento
    ArrotondaPerEccesso = numeroTroncatoDueDecimali / 100
End Function
'-------------------------------------------------------------------------------

PS
Forse così è meglio...
Function Eccesso(ByVal d As Double, ByVal i As Integer) As Double
Return Math.Truncate(d) + Math.Ceiling(Math.Round(((d - 
Math.Truncate(d)) * Math.Pow(10, i)), i)) / Math.Pow(10, i)
End Function
-- 


PS
Forse così è meglio....
Function Eccesso(ByVal d As Double, ByVal i As Integer) As Double
   If i < 1 Then
      Return Math.Ceiling(d)
   Else
      Dim tr As Double = Math.Truncate(d)
      Dim dc As Double = Math.Pow(10, i)
      Return tr + Math.Ceiling(Math.Round(((d - tr) * dc), i)) / dc
   End If
End Function


 Cè un modo possibile?
Round(x + 0.05, 1)
Poi per far comparire (in una stringa) gli zeri non significativi usi Format
come ti hanno già suggerito.
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 ha scritto nel messaggio 
news:469c5cf1$0$17950$4faf...@reader1.news.tin.it...


 TG.
Io farei così:
z$=format$(num+.09,"####.#")+"0"
Se poi ti serve come numero fai:
num=val(z$)
esempio tuo:
z$=format$(21.23+.09,"####.#")+"0"
restituisce
21.30
Semplicissimo infallibile.
Oldman
PS ma perchè hanno abolito il VB6 a me piaceva e piace ancora tanto.

 PS ma perchè hanno abolito il VB6 a me piaceva e piace ancora tanto.
Perchè consentiva di scrivere roba come quella che hai scritto tu, e di 
non accorgersi della loro sgangheratezza.
Scusa la franchezza.
Alberto
-- 
La forza di volontà è guardare negli occhi una ragazza in topless.

 ha dciso di scrivere

Sarò sgangherato non lo metto in dubbio se me lo dice un padreterno.
Purtroppo sono solo un mortale che ha scritto per l'Ansaldo - il numero UNO 
per la segnalazione ferroviaria al mondo un programma per le condizioni e le 
incompatibilità degli itinerari dei treni nelle grandi stazioni.
E questo quando era tutto molto più difficile che oggi.
Testato e verificato da esperti ingegneri perchè NON DEVE fallire MAI, prova 
a pensare un treno che riceve un segnale di via libera che irrompe a 200 Kmh 
su un binario ingombro.
Mi contento della referenza degli esseri umani, ai padreterni non ci sono 
ancora abituato.
Oldie
 

 ancora abituato.
Senza offesa, la tua è la classica risposta da offeso a causa della coda di 
paglia, Albe (col quale mi capita di litigare) mi ha solo preceduto e 
comunque con la scusa finale ha posto l'attenzione sui fatti, non su di te.
Personalmente questo post l'avrei concluso con un banalissimo
Function Arrotonda(n As Double, decimaleArrotondato As Integer) As Double
    Dim Fattore As Integer
    Fattore = (10 * decimaleArrotondato)
    ' Controlliamo se è già arrotondato
    If (n * Fattore) <> Fix(n * Fattore) Then
        Arrotonda = Fix(n * Fattore + 1) / Fattore
    Else
        Arrotonda = n
    End If
End Function
Il problema è sempre il solito: si usano i double e il rischio è quello che 
il risultato non sia affidabile al 100% anche se VB tenta già la correzione 
quando possibile.
Ciao 

 End Function
Meglio ancora
 Function Arrotonda(n As Double, decimaleArrotondato As Integer) As Double
    Dim Fattore As Integer
    Dim Fattorato As Double ' Fattorato? :)
    Fattore = (10 * decimaleArrotondato)
    Fattorato = n * Fattore
    ' Controlliamo se è già arrotondato
    If Fattorato <> Fix(Fattorato) Then
        Arrotonda = Fix(Fattorato + 1) / Fattore
    Else
        Arrotonda = n
    End If
 End Function
Ciao 

 Mi contento della referenza degli esseri umani, ai padreterni non ci sono ancora abituato.
C'è sempre una prima volta, poi ti abitui.
(Lo dicevo alla mia prima ragazza, tanti e tanti anni fa, alla fine
mi ha dato ragione ;-) ).
Bye, G. 

 Sarò sgangherato non lo metto in dubbio se me lo dice un padreterno.
Non sono un padreterno.
Infatti ciò che hai detto e scritto (in particolare quella del Val 
applicata ad una formattazione localizzata) è roba da abc di VB6, non 
serve essere fenomeni.
Spero solo che quel codice non sia servito per la gestione degli scambi 
dei treni. Altrimenti facciamo risorgere l'Alitalia.
Alberto
-- 
Alessandro Bergonzoni: Il tempo vola e noi no. Strano sarebbe se noi 
volassimo e il tempo no, il cielo sarebbe pieno di uomini con 
l'orologio fermo.


Pessimista!
Per le "pagine provenienti da: Italia" sono solo 786.000 :)
Ciao 


E poi non li vedi i telegiornali?
Quelli sono errori umani del macchinista :P
Ciao 

 Ciao
Non hai portato l'esempio di e con quali numeri fallisce, quindi è 
un'affermazione senza sperimentazione.
Mi auguro che la tua preparazione in software sia ben superiore alla tua 
grammatica e punteggiatura, forse ti manca la modestia per essere perfetto.
Intendiamoci BENE, qualunque cosiddetto linguaggio che io chiamerei 
interfaccia, ha lo scopo finale di produrre un codice binario per eseguire 
una certa procedura.
Quindi questi non sono altro che programmi redatti da validissimi tecnici 
per agevolare la vita dei programmatori, ma di questi pochi conoscono in 
cosa una volta compilato si trasforma il codice.
Ecco che assumuno in aria da padreterni come taluni che sanno usare 
l'autocad talvolta fanno, dimenticando di essere semplici utenti.
Io ho detto infallibile, ma NESSUNO mi ha portato un esempio di numeri con 
il quale fallisce.
Dileggiare gli altri è lo sport preferito di questo NG ma dileggiare 
offendendo la grammatica e la sintassi italiana come se fossero cose 
secondarie è quanto meno poco elegante.
E finiamola qui, non ci sarà risposta, vado in vacanza non prima di aver 
dissottoscritto questo NG.
Oldman

 dissottoscritto questo NG.
Bravo, visto che la tua è una coda di paglia?
Chissà com'è che un mucchio di gente che se ne intende preferisce correggere 
piuttosto che dire "che bravo che è, tu usa il suo codice che fa deragliare 
i treni".
Tra parentesi, tu ti sarai offeso ancora anzichè divertirti un po', ma il 
discorso sui treni erano delle battute, non delle offese dirette.
Ciao