Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    680

    Conversione valore delphi

    Ciao a tutti,
    sto cercando di assegnare un valore decimale ad un label:
    codice:
    Label22.Caption := IntToStr((DataModule2.Q_uno.RecordCount * 100)/2);
    Però non mi accetta nulla e mi da errore!!
    Cosa sto sbagliando??

    Fatemi sapere.
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    680
    Dovrei aver risolto con VarToStr... ora il problema è che mi da cifre con 7 numeri dopo la virgola mentre ne vorrei solo 2 come posso fare?

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Il tuo problema è che stai utilizzando la funziona sbagliata per lo scopo.

    La funzione IntToStr, come suggerisce il nome, converte un valore intero nella stringa corrispondente, mentre nel tuo caso devi convertire un valore a virgola mobile in stringa.
    In un linguaggio estremamente tipizzato come Delphi, l'uso di un tipo al posto di quello che la funzione si aspetta non viene accettato in questi casi.

    La funzione VarToStr probabilmente non segnala errori poichè accetta valori di qualsiasi tipo (Variant) in ingresso, ma di certo non è la funzione più performante in questo contesto; i Variant possono sensibilmente ridurre la velocità di esecuzione del programma data la loro complessità di memorizzazione e gestione.

    Concludendo, è meglio se usi la funzione FloatToStr che, come suggerisce di nuovo il nome, converte da float a string.

    L'elevato numero di cifre decimali probabilmente è causato dalla mancanza di un'indicazione sulla precisione che desideri ottenere, quindi tutte le cifre del numero decimale vengono mostrate. In questo caso, usa la funzione FormatFloat per specificare una stringa di formato da utilizzare per la rappresentazione del valore decimale sottoforma di stringa.

    Un esempio:
    codice:
    MyLabel.Caption := FormatFloat('0.00', MyFloatValue);
    Seleziona con il cursore FormatFloat o qualsiasi altra funzione e premi il tasto F1 per richiamare la Guida in linea di Delphi la quale saprà darti tutte le indicazioni necessarie.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    680
    Grazie mille... faccio prove poi se ci sono problemi mi faccio rinsentire.
    Ciao ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    680
    Son tornato... ho un errore.
    Allora:
    codice:
    Label22.Caption := FloatToStr(FormatFloat('0.00',((DataModule2.Q_uno.RecordCount * 100)/DataModule2.Q_intervistati.RecordCount)));
    l'errore è:
    incompatible types:'Extended' and 'string'

    Cos'è?

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    680
    Ho utilizzato la stessa funzione che ho scritto sopra modificando da floattostr a vartostr e tutto dunziona bene.
    Sicuramente non è la miglior cosa... se avete del tempo per vedere un pò...

    FATEMI SAPERE.
    GRAZIE.

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Scusa, ma hai almeno guardato l'esempio che ti ho postato io??
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    680
    Si, ho cercato di modificare ciò che mi hai scritto in base alle mie esigenze; almeno così avrei voluto fare.
    Ho sbagliato qualcosa???

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da uomoragno2
    Si, ho cercato di modificare ciò che mi hai scritto in base alle mie esigenze; almeno così avrei voluto fare.
    Ho sbagliato qualcosa???
    Diciamo che hai preso un esempio corretto aggiungendo quello che basta per renderlo non funzionante. :rollo:

    La funzione FormatFloat ti restituisce già un valore "stringa", pertanto non puoi usare il valore restituito da tale funzione e passarlo alla FloatToStr che si aspetta di ricevere un valore decimale, e non una stringa.

    La sola e unica funzione che serve per raggiungere il tuo scopo è FormatFloat, non hai bisogno di altro. L'unica cosa che devi sostituire è il secondo parametro in cui devi specificare l'espressione che restituisce il valore decimale da convertire.

    Va detto anche che non puoi ignorare i messaggi di errore restituiti dal compilatore; se Delphi ti indica l'errore "Incompatible types Extended and String", significa che stai passando una stringa ove è richiesto un tipo Extended (o comunque un valore a virgola mobile di rango più piccolo).

    Dal fatto che tu non sia riuscito a comprendere il mio esempio, sospetto che tu abbia anche delle lacune per quanto riguarda la logica stessa di programmazione e/o di utilizzo del linguaggio: magari ti conviene leggere prima un po' di documentazione, consultare qualche corso gratuito online, tanto per avere un minimo di infarinatura...altrimenti rischi di bloccarti una volta ogni 30 secondi e di non riuscire a spiegarti nessuna delle cose che succedono, per le quali invece esiste una spiegazione ben determinata.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    680
    Grazie mille per la risposta... sicuramente ho bisogno di imparare tanto; cerco qualcosa sia su carta che sul web.
    Grazie di nuovo.
    Ciao ciao

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 © 2024 vBulletin Solutions, Inc. All rights reserved.