Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Numero di decimali nella conversione QString in toDouble()
Qt 6.11 is out! See what's new in the release blog

Numero di decimali nella conversione QString in toDouble()

Scheduled Pinned Locked Moved Solved Italian
6 Posts 4 Posters 3.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    silvio
    wrote on last edited by
    #1

    Salve a tutti.
    Non riesco a salvare su un double il numero corretto che inserisco in un QLineEdit.
    Mi spiego meglio.
    In una QLineEdit inserisco ad esempio il numero 123.45678
    quando lo memorizzo in un double, ottengo un valore troncato alla terza cifra decimale.
    Il codice che uso è il seguente:

    QString qstr = myLineEdit->text();
    double d = qstr.toDouble(&ok);

    Il risultato che ottengo è ok=true e d=123.457
    Se stampo
    cout << qstr.toStdString() << endl;
    ottengo il valore correttamente inserito "123.45678"
    ma la stampa del double
    cout << d << endl;
    è 123.457
    Fino a quando inserisco nel QLineEdit un valore che non supera 6 numeri, il double d è corretto, ma quando inserisco un valore con più di 6 numeri ottengo un double d troncato.
    Come posso fare?
    Grazie.
    Sto usando la versione 5.6.2 di Qt.

    1 Reply Last reply
    0
    • VRoninV VRonin

      QVariant serve per salvare dati di cui non si sa il tipo a priori. Qui e' semplicemente un problema di come std::cout stampa i numeri. Non e' un problema realtivo a Qt. Qui trovi la soluzione: https://stackoverflow.com/questions/554063/how-do-i-print-a-double-value-with-full-precision-using-cout

      Concordo comunque sul fatto che per l'input di numeri QDoubleSpinBox e' preferibile

      S Offline
      S Offline
      silvio
      wrote on last edited by
      #5

      Scusate, ho trovato il problema!
      Come suggerito da Vinod, ho provato a stampare a video il numero double, utilizzando qDebug() ed ho ottenuto il risultato corretto.
      Questo mi fa capire che il problema non è nella memorizzazione del numero
      double d = qstr.toDouble(&ok);
      ma nel modo in cui il numero double lo voglio visualizzare in una QLineEdit.
      Inizialmente il mio codice era del tipo:

      QString qstr = myLineEdit->text();
      double d = qstr.toDouble(&ok);
      ....
      qstr = QString::number(d);
      myLineEdit1->setText(qstr);

      In questo caso, se nella myLineEdit scrivo "123.456789"
      nella myLineEdit1 ottengo "123.457"

      Ho semplicemente modificato la riga:
      qstr = QString::number(d);
      e l'ho sostituita con
      qstr = QString::number(d, 'g', 10);

      in questo modo nella myLineEdit1 ottengo il numero corretto "123.456789"

      Grazie a tutti per il contributo e l'interessamento.
      Buona giornata.

      1 Reply Last reply
      0
      • Vinod KuntojiV Offline
        Vinod KuntojiV Offline
        Vinod Kuntoji
        wrote on last edited by Vinod Kuntoji
        #2

        @silvio ,

        qDebug() << qSetRealNumberPrecision(10) << "d = " << d << endl;

        C++, Qt, Qt Quick Developer,
        PthinkS, Bangalore

        1 Reply Last reply
        0
        • P Offline
          P Offline
          patrik08
          wrote on last edited by
          #3

          @silvio said in Numero di decimali nella conversione QString in toDouble():

          double

          Uauuu .. in italiano.. :-)
          mi fa piacere ... qt ha le sue preferenze in fatto di tipi di numeri decimali o interi..
          in quei casi metto il tutto i un QVariant il quale mi trasforma meglio il risultato...
          http://doc.qt.io/qt-5/qvariant.html
          e cosi on tanti altri formati... e giuro che quello che restituisce QVariant è sempre perfetto anche le proprie lassi fatte o altri tipi..
          Poi per i numeri esistono i campi apposta per i numeri .. tipo QSpinBox e qcombobox vedi gli esempi .. non li so a memoria tutti..
          pure io vedo i fari nomi nel UI designer quando li faccio..

          1 Reply Last reply
          0
          • VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #4

            QVariant serve per salvare dati di cui non si sa il tipo a priori. Qui e' semplicemente un problema di come std::cout stampa i numeri. Non e' un problema realtivo a Qt. Qui trovi la soluzione: https://stackoverflow.com/questions/554063/how-do-i-print-a-double-value-with-full-precision-using-cout

            Concordo comunque sul fatto che per l'input di numeri QDoubleSpinBox e' preferibile

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            S 1 Reply Last reply
            0
            • VRoninV VRonin

              QVariant serve per salvare dati di cui non si sa il tipo a priori. Qui e' semplicemente un problema di come std::cout stampa i numeri. Non e' un problema realtivo a Qt. Qui trovi la soluzione: https://stackoverflow.com/questions/554063/how-do-i-print-a-double-value-with-full-precision-using-cout

              Concordo comunque sul fatto che per l'input di numeri QDoubleSpinBox e' preferibile

              S Offline
              S Offline
              silvio
              wrote on last edited by
              #5

              Scusate, ho trovato il problema!
              Come suggerito da Vinod, ho provato a stampare a video il numero double, utilizzando qDebug() ed ho ottenuto il risultato corretto.
              Questo mi fa capire che il problema non è nella memorizzazione del numero
              double d = qstr.toDouble(&ok);
              ma nel modo in cui il numero double lo voglio visualizzare in una QLineEdit.
              Inizialmente il mio codice era del tipo:

              QString qstr = myLineEdit->text();
              double d = qstr.toDouble(&ok);
              ....
              qstr = QString::number(d);
              myLineEdit1->setText(qstr);

              In questo caso, se nella myLineEdit scrivo "123.456789"
              nella myLineEdit1 ottengo "123.457"

              Ho semplicemente modificato la riga:
              qstr = QString::number(d);
              e l'ho sostituita con
              qstr = QString::number(d, 'g', 10);

              in questo modo nella myLineEdit1 ottengo il numero corretto "123.456789"

              Grazie a tutti per il contributo e l'interessamento.
              Buona giornata.

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by VRonin
                #6

                Nota a margine: QString::number non e' localizzato cosi' come QString::toDouble.

                Se inserisci un numero in numeri non-arabi (ebraici, cinesi, etc.) o semplicemente usi un separatore decimale diverso dalla convenzione inglese (usi la virgola invece del punto) nulla funziona.

                Quando gestisci coversioni tra stringa e numeri con la stringa esposta all'utente finale dovresti sempre usare usare QLocale

                • double d = myLineEdit1->locale().toDouble(qstr,&ok);
                • qstr = myLineEdit1->locale().toString(d, 'g', 10);

                o, come suggerito in precedenza, usa uno spinbox che fa il lavoro per te

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved