Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB6] Addizione!

    Scusate tanto eh ma perchè se provo a fare 2+2 il risultato non è 4, ma bensì 22?!

    Io faccio così:

    Dim risultato
    risultato = Text1 + Text2
    MsgBox risultato

    EDIT: ho sostituito And con + perchè mi ero sbagliato a scrivere (l'ho dovuto editare sennò facevo una figura troppo n00b )
    Asus M3A32-MVP Deluxe | AMD Athlon 64 X2 6400+ | ATI Radeon HD 5770 | 4x1GB DDR2-667 Kingston

  2. #2
    ARGH! Orrore!
    codice:
    Dim risultato  As Double
    risultato = CDbl(Text1.Text)+CDbl(Text2.Text)
    MsgBox CStr(risultato)
    Le correzioni in rosso riguardano veri e propri errori, quelle in arancione si possono anche evitare ma producono codice più efficiente ed elegante.
    Prima riga: è SEMPRE meglio specificare il tipo di dato di una variabile, altrimenti essa sarà un Variant, che occupa inutilmente 16 byte e rallenta le operazioni.
    Seconda riga: panico! Il codice che hai scritto prendeva il contenuto delle due textbox (facendo implicito riferimento alla proprietà di default "text", esplicitata invece nel mio codice), ossia due stringhe, e le concatenava con l'operatore And (che dovrebbe essere un operatore di And binario ma che per qualche motivo con le stringhe diventa operatore di concatenazione); per questo veniva fuori "22" come risultato. La versione corretta invece effettua il parsing delle due stringhe, convertendole in valori double (numeri in virgola mobile a precisione doppia) per poterle sommare correttamente. Quindi assegna il risultato alla variabile "risultato" (anch'essa di tipo double).
    Terza riga: ho aggiunto un CStr perché "risultato" è di tipo Double e MsgBox accetta un parametro di tipo String; si può anche omettere, ma non è mai il caso di affidarsi al casting automatico di VB6, poiché rallenta inutilmente l'applicazione.
    P.S.: per le domande di VB6 c'è un forum apposito.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ok grazie.
    P.S. Mi sono sbagliato a postare, al posto di And avevo messo + ma non funzionava uguale
    Asus M3A32-MVP Deluxe | AMD Athlon 64 X2 6400+ | ATI Radeon HD 5770 | 4x1GB DDR2-667 Kingston

  4. #4
    Originariamente inviato da Alexg
    Ok grazie.
    Prego, ma studiati un manuale, per cortesia
    P.S. Mi sono sbagliato a postare, al posto di And avevo messo + ma non funzionava uguale
    Mi pareva strano che And facesse da operatore di concatenazione... comunque l'operatore + con le stringhe effettua un'operazione di concatenazione, dando il risultato che ottenevi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Prego, ma studiati un manuale, per cortesia
    Mah non ho aspirazioni per diventare un bravo programmatore in VB, anche perchè me ne intendo molto di più in PHP
    Comunque ho letto tutta la guida di HTML.it, c'è l'agenda elettronica ma non ci sono cose basilari come un'addizione!
    Asus M3A32-MVP Deluxe | AMD Athlon 64 X2 6400+ | ATI Radeon HD 5770 | 4x1GB DDR2-667 Kingston

  6. #6
    Il problema non è l'addizione in sé, si tratta di saper lavorare con i tipi di dati...
    Amaro C++, il gusto pieno dell'undefined behavior.

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.