Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291

    VB6 - Tagliare una cifra con 2 decimali.

    Il problema è il seguente: A + B = C
    A=12,56
    B=20,12
    C=32,68

    Ora se faccio: If 32,68 <>(12,56 + 20,12) Then
    Messaggio di errore !!
    Del tutto inatteso perchè C=(A+B), cosa che ho controllato più volte facendo la somma di ciò che è visualizzato nelle Txt.
    Per formattare i risultati uso la funzione
    Format(VariabileDouble, "#,##0.00") quindi con separatore delle migliaia e due decimali.
    Vi è capitato? Come avete risolto ?
    LM

  2. #2
    Non ho capito bene..ma che tipo di messaggio di errore ti dà? Per i numeri ricordati di utilizzare il punto anzichè la virgola.

    Cosa c'entra la formattazione con il messaggio di errore?

    Per visualizzare solo alcune cifre decimali usa Instr e poi Left..

  3. #3
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Mi sono espresso in modo incompleto. L'errore emerge quando non c'è la predetta uguaglianza, è un controllo che ho programmato per essere certo che in alcuni punti del prog. le cifre siano concordanti. Quindi non è una questione di punto o virgola come separatore, ma ad esempio il risultato di una divisione con un resto maggiore di due cifre decimali, con la predetta funzione Format lo taglio a 2 decimali (almeno penso), se poi il risultato della divisione viene successivamente elaborato e posto a confronto, succede quello che lamento nel precedente post. E' come se le variabili tenessero memoria di decimali che non sono visualizzati e che quindi nella somma non danno più l'uguaglianza.
    LM

  4. #4

    Re: VB6 - Tagliare una cifra con 2 decimali.

    Originariamente inviato da LMondi
    Il problema è il seguente: A + B = C
    A=12,56
    B=20,12
    C=32,68

    Ora se faccio: If 32,68 <>(12,56 + 20,12) Then
    Messaggio di errore !!
    L'errore viene restituito in quanto 32,68 è UGUALE, non diverso, dalla somma di 12,56 + 20,12..

    Cmq se presumi che vengano tenuti in memoria dei decimali, al posto della funzione Format prova ad usare un altro metodo, più lungo ma alquanto efficace, cioè:
    codice:
    pos = instr(1,valore,",",vbTextCompare)
    numero = Left(valore,pos + 2)
    Cioè vengono considerati solo due decimali..

    Cmq se ho capito bene il problema sta nel fatto che:
    1) esegui dei calcoli
    2) essi vengono formattati
    3) quanto, durante l'esecuzione, vengono controllati danno un errore (di approssimazione in quanto pensi che rimangano in memoria altre cifre decimali che fanno cambiare il numero)

    Se non è così dimmelo..

    ciao

  5. #5
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao MdE2005, come sempre sei molto gentile.
    Mi hai messo in crisi!
    codice:
    "L'errore viene restituito in quanto 32,68 è UGUALE, non diverso, dalla somma ..."
    possibile che commetta un errore di logica? L'errore dovrebbe emergere se 32,68 è diverso: If 32,68 <>(12,56 + 20,12) Then.
    Per quanto riguarda la sintesi del problema da te indicata, punti da 1 ./. 3 , confermo.
    E' evidente che dovrò cambiare sistema, magari quello da te indicato, sempre che sia errata l'equazione sopra esposta. Ti sarei grato se confermi.
    Se non ci vediamo (sentiamo)nel prosieguo ne approfitto per farti gli auguri di Buon 2006!!
    LM

  6. #6
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Dovendo fare un confronto tra stringhe, come da te suggerito, avrei risolto in questo modo, cosa ne dici?
    codice:
    RisM = StrComp(valoreM1, valoreM2, vbBinaryCompare)
            If RisM <> 0 Then
                MsgBox "E' presente un errore nella somma del ..." & Chr(13) _
                & "Prego controllare !", vbExclamation + vbOKOnly, "Determinazione del ...."
                ' Evidenzia l'errore:
                FrmTariffa.txtMin.SetFocus
                ' Parte dall'inizio del numero:
                FrmTariffa.txtMin.SelStart = 0
                ' Evidenzia tutta la lunghezza del numero:
                FrmTariffa.txtMin.SelLength = Len(FrmTariffa.txtMin.Text)
            End If
    Sembra che funzioni, anche per variazioni di +/-0.01 .
    LM

  7. #7
    Ciao LMondi..innanzitutto auguri anche a te..

    Per la routine che hai scritto vedo che va tutto bene, e per quanto riguarda l'approssimazione che hai riscontrato penso ti possa soddisfare (anche se dipende dalle tue esigenze).

    Fammi sapere nei prossimi giorni come sta andando, ok?

    Ciao e BUON 2006

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.