Vai al contenuto
PLC Forum


Aiuto Per Vb6 - Funzioni su calcoli numerici


bigalex

Messaggi consigliati

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 :blink:

Link al commento
Condividi su altri siti


ifachsoftware
1- Dato un valore con virgola mobile vorrei recuperare il solo valore dopo la virgola ed appoggiarlo su una variabile
Modificato: da ifachsoftware
Link al commento
Condividi su altri siti

Un altra soluzione meno tecnica, piu' da pinela, potrebbe essere questa:

'1)================================================================

Dim strNumero As String

Dim intPosizione As Integer

Dim strDecimali As String

Dim 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 String

Dim strEsadecimale As String

Dim intContatore As Integer

Dim intQuattro As Integer

Dim intOtto As Integer

Dim IntDecimale As Integer

Dim intPosiz As Integer

Dim 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: da dago_
Link al commento
Condividi su altri siti

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 . :rolleyes:

bigalex :blink:

Modificato: da bigalex
Link al commento
Condividi su altri siti

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 è: " & binario

End Sub

Link al commento
Condividi su altri siti

ifachsoftware

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 :o

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 :)

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...