2008/5/19 jack <[EMAIL PROTECTED]>:
> 2008/5/18 Valerio Messina <[EMAIL PROTECTED]>:
>
> correggo il primo esempio:
>>
>> N=2.9, X=0
>> round (2.9+0.5*1, 0) = round (3.4, 0) = 3
>>
>>
>>
>> Valerio
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> Ti ringrazio, innanzitutto, delle risposte...a me serve l' equivalente calc
> della funzione RoundUp e, quanto segue, imho, dovrebbe funzioinare...ma
> fallisce su, ad esempio, "0.5545" approssimando a 3 cifre decimali:
>
> Function myRoundUp (Numero As Double, Cifre As Integer) As Double
> myRoundUp=Int((Numero+0.5/10^Cifre)*10^Cifre)/10^Cifre
> End Function
>
> quel che non va - e non ne capisco il perche' - e' il comportamento di Int
> (cosi' come quello di Fix)...eseguendo passo passo sul valore "0.5545" per
> Numero e "3" per Cifre":
>
> 0.5545+0.0005=0.5550 // Numero+0.5/10^Cifre
> 0.5550*1000=555.0 // (Numero+0.5/10^Cifre)*10^Cifre)
> Int(555.0)=554 // Int((Numero+0.5/10^Cifre)*10^Cifre) <- Errore!
> 554/1000=0.554 //Int((Numero+0.5/10^Cifre)*10^Cifre)/10^Cifre
>
> Eppure il mero:
>
> Int(555)=555
>
> Bho'!?!?!
>
> Dove sbaglio?
>
> In teoria son tutti double, quindi non dovrebbero esserci errori di
> conversione :|
>
>
Ho riscritto la macro aggiungendo una subroutine di prova e tre step di
debug (con l' ausilio di print)...lo step che fallisce e' il terzo:
sub prova
print myroundup(0.5545,3)
end sub
Function myRoundUp (Numero As Double, Cifre As Integer) As Double
print "Step 1: " + (Numero+0.5/10^Cifre)
print "Step 2: " + ((Numero+0.5/10^Cifre)*10^Cifre)
print "Step 3: " + Int((Numero+0.5/10^Cifre)*10^Cifre)
myRoundUp=Int((Numero+0.5/10^Cifre)*10^Cifre)/10^Cifre
End Function