bigalex Inserito: 29 aprile 2004 Segnala Inserito: 29 aprile 2004 Da poco ho iniziato a operare con VB6 , al momento ho la necessità di fare quanto segue :1- Dato un valore con virgola mobile vorrei recuperare il solo valore dopo la virgola ed appoggiarlo su una variabile ;2- Dato un valore decimale vorrei trasformarlo in un valore binario (es. 01010101) per poter poi con delle maschere dicriminare il valore di ogni singolo bit .Grazie a chiunque mi possa aiutare .bigalex
ifachsoftware Inserita: 29 aprile 2004 Segnala Inserita: 29 aprile 2004 (modificato) 1- Dato un valore con virgola mobile vorrei recuperare il solo valore dopo la virgola ed appoggiarlo su una variabile Modificato: 29 aprile 2004 da ifachsoftware
dago_ Inserita: 29 aprile 2004 Segnala Inserita: 29 aprile 2004 (modificato) Un altra soluzione meno tecnica, piu' da pinela, potrebbe essere questa:'1)================================================================Dim strNumero As StringDim intPosizione As IntegerDim strDecimali As StringDim strRisultatoDecimali As String strNumero = CStr(123456.987) 'converte il numero in stringa intPosizione = InStr(strNumero, ",") 'cerca la virgola strDecimali = Mid$(strNumero, intPosizione + 1, Len(strNumero)) 'risultato stringa dopo la virgola strRisultatoDecimali = strDecimali'2)================================================================Dim strBinario As StringDim strEsadecimale As StringDim intContatore As IntegerDim intQuattro As IntegerDim intOtto As IntegerDim IntDecimale As IntegerDim intPosiz As IntegerDim strRisultatoBinario As String'Il numero decimale deve essere compreso tra -32768 e +32767'altrimenti c'e' un errore di overflow IntDecimale = 32100 strBinario = "" strEsadecimale = Hex(IntDecimale) ' converte da decimale a esadecimale For intContatore = 1 To Len(strEsadecimale) intPosiz = InStr("0123456789ABCDEF", Mid(strEsadecimale, intContatore, 1)) - 1 If intPosiz < 0 Then strBinario = "" Exit For End If intOtto = 8 intQuattro = 4 Do ' converte da esadecimale e binario strBinario = strBinario + Right$(Str((intPosiz \ intOtto) Mod 2), 1) intOtto = intOtto - (intOtto \ 2) intQuattro = intQuattro - 1 If intQuattro = 0 Then Exit Do Loop While intOtto Next intContatore strRisultatoBinario = strBinario Modificato: 29 aprile 2004 da dago_
bigalex Inserita: 29 aprile 2004 Autore Segnala Inserita: 29 aprile 2004 (modificato) G R A Z I E 100000 !Provo subito le vostre soluzioni .Per Dago forse non sono stato sufficientemente chiaro per il punto 1 .Infatti io necessito di conoscere la sola componente dopo la virgola e cioè se il valore primario è 12,345 io necessito di avere il valore 345 ossia la parte a destra della virgola in un valore non intero .buona giornata e buon lavoro a tutti . bigalex Modificato: 29 aprile 2004 da bigalex
nll Inserita: 29 aprile 2004 Segnala Inserita: 29 aprile 2004 Io proverei questa soluzione, senza passare dalla trasformazione esadecimale, considerando un fisso di 5 cifre dopo la virgola. Ho considerato il valore un "Long", quindi utilizzo 24 bit (in realtà ne occupo solo 17, avendo limitato il numero a "99999"), invece dei 16 di un "Integer".Sub prova() Dim a As Double Dim b As Long Dim c As String Dim binario As String a = 42.999999999 b = Fix(a) ' Registro la parte intera del "Double", senza operare alcun arrotontamento MsgBox "Il valore di ""b"" è: " & b a = ( a - b ) * 100000 ' Tolgo dal "Double" il valore del suo intero ed ottengo la parte decimale ' Moltiplico per 100000 per considerare di fisso 5 cifre dopo la virgola MsgBox "Ora il valore di ""a"" è: " & a / 100000 c = Str(a) c = Left(c, InStr(1, c, ".") - 1) ' Elimino dalla stringa la virgola e il resto MsgBox "Mentre ""c"" vale: " & c b = Val( c ) MsgBox "Ho messo il decimale in ""b"" che ora è: " & b binario = "" Do Until b = 0 ' Ciclo che trasforma il numero decimale in un binario binario = (b Mod 2) & binario b = Fix(b / 2) Loop MsgBox "Il valore binario della parte decimale è: " & binarioEnd Sub
ifachsoftware Inserita: 29 aprile 2004 Segnala Inserita: 29 aprile 2004 Attenti che nel ricercare la stringa ',' nel numero , questo e' dipendente dalla versione di windows installata , quindi vi funzioera' in italiano ma magari vi frega in inglese .... perche' usano il '.' invece della virgola Con il mio esempio il valore dopo la virgola lo ottenete per sottrazione dal valore davanti , se non volete lo 0,3455 basta fare un Mid(str(Valore),3)Ciao
nll Inserita: 29 aprile 2004 Segnala Inserita: 29 aprile 2004 Attenti che nel ricercare la stringa ',' nel numero , questo e' dipendente dalla versione di windows installata
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora