Jump to content
PLC Forum

bigalex

Aiuto Per Vb6 - Funzioni su calcoli numerici

Recommended Posts

bigalex

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 to post
Share on other sites

ifachsoftware
1- Dato un valore con virgola mobile vorrei recuperare il solo valore dopo la virgola ed appoggiarlo su una variabile
Edited by ifachsoftware
Link to post
Share on other sites
dago_

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

Edited by dago_
Link to post
Share on other sites
bigalex

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:

Edited by bigalex
Link to post
Share on other sites
nll

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 to post
Share on other sites
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 to post
Share on other sites
nll
Attenti che nel ricercare la stringa ',' nel numero , questo e' dipendente dalla versione di windows installata
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...