Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Showing numbers in decimal not scientific notation
Forum Updated to NodeBB v4.3 + New Features

Showing numbers in decimal not scientific notation

Scheduled Pinned Locked Moved Unsolved General and Desktop
41 Posts 9 Posters 30.1k Views 5 Watching
  • 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.
  • T Offline
    T Offline
    tomy
    wrote on 28 Jan 2017, 13:47 last edited by
    #1

    Hi all,

    In may app I have a double variable:

    double d;
    

    When the result of 10^6 goes to that variable, it shows it this way: 1e+06
    How to do to make the app show the result in decimal, 1000000?

    K 1 Reply Last reply 28 Jan 2017, 13:53
    0
    • T tomy
      28 Jan 2017, 13:47

      Hi all,

      In may app I have a double variable:

      double d;
      

      When the result of 10^6 goes to that variable, it shows it this way: 1e+06
      How to do to make the app show the result in decimal, 1000000?

      K Offline
      K Offline
      koahnig
      wrote on 28 Jan 2017, 13:53 last edited by
      #2

      @tomy
      Where do you want to see a fixed number?

      Vote the answer(s) that helped you to solve your issue(s)

      T 1 Reply Last reply 28 Jan 2017, 14:05
      0
      • C Offline
        C Offline
        Chris Kawa
        Lifetime Qt Champion
        wrote on 28 Jan 2017, 13:54 last edited by
        #3

        @tomy said in Showing numbers in decimal not scientific notation:

        it shows it this way

        What is "it"? Where do you view the variable? In the debugger? On the standard output? In a text widget? What (if any) function do you use to output the variable?

        T 1 Reply Last reply 28 Jan 2017, 14:06
        0
        • M Offline
          M Offline
          mostefa
          wrote on 28 Jan 2017, 13:55 last edited by mostefa
          #4

          Hi @tomy

          I don't know if this is what you want, but if you wanna keep only the decimal part of your double you can cast your double to int, you can do something like this :

          (int)(10^6)

          T 1 Reply Last reply 28 Jan 2017, 14:07
          0
          • K koahnig
            28 Jan 2017, 13:53

            @tomy
            Where do you want to see a fixed number?

            T Offline
            T Offline
            tomy
            wrote on 28 Jan 2017, 14:05 last edited by
            #5

            @koahnig
            The number, "1e+06", will be sent to a QTextStream which has the address of a QString. Then that string will be sent to a lineEdit. and finally LineEdit will show the number in scientific notation.

            1 Reply Last reply
            0
            • C Chris Kawa
              28 Jan 2017, 13:54

              @tomy said in Showing numbers in decimal not scientific notation:

              it shows it this way

              What is "it"? Where do you view the variable? In the debugger? On the standard output? In a text widget? What (if any) function do you use to output the variable?

              T Offline
              T Offline
              tomy
              wrote on 28 Jan 2017, 14:06 last edited by
              #6

              @Chris-Kawa
              I run it in standard mode (ctrl + R).

              C 1 Reply Last reply 28 Jan 2017, 14:31
              0
              • M mostefa
                28 Jan 2017, 13:55

                Hi @tomy

                I don't know if this is what you want, but if you wanna keep only the decimal part of your double you can cast your double to int, you can do something like this :

                (int)(10^6)

                T Offline
                T Offline
                tomy
                wrote on 28 Jan 2017, 14:07 last edited by
                #7

                @mostefa
                No dear. I don't want it.

                1 Reply Last reply
                0
                • T tomy
                  28 Jan 2017, 14:06

                  @Chris-Kawa
                  I run it in standard mode (ctrl + R).

                  C Offline
                  C Offline
                  Chris Kawa
                  Lifetime Qt Champion
                  wrote on 28 Jan 2017, 14:31 last edited by
                  #8

                  @tomy said in Showing numbers in decimal not scientific notation:

                  I run it in standard mode (ctrl + R).

                  That's not what I... ugh, nevermind.
                  So you say you're using QTextStream. Ok, so you have a code similar to this right?

                  QTextStream foo = ...;
                  double bar = ...;
                  foo << bar;
                  

                  If that's the case then you can do it in a couple of ways:
                  Switch the stream serialization mode for floating numbers to fixed notation:

                  QTextStream foo = ...;
                  foo.setRealNumberNotation(QTextStream::FixedNotation);
                  double bar = ...;
                  foo << bar;
                  

                  or pre-format the number the way you want it and pass the resulting string to the stream:

                  QTextStream foo = ...;
                  double bar = ...;
                  foo << QString::number(bar, 'f');
                  
                  T 1 Reply Last reply 28 Jan 2017, 15:18
                  3
                  • C Chris Kawa
                    28 Jan 2017, 14:31

                    @tomy said in Showing numbers in decimal not scientific notation:

                    I run it in standard mode (ctrl + R).

                    That's not what I... ugh, nevermind.
                    So you say you're using QTextStream. Ok, so you have a code similar to this right?

                    QTextStream foo = ...;
                    double bar = ...;
                    foo << bar;
                    

                    If that's the case then you can do it in a couple of ways:
                    Switch the stream serialization mode for floating numbers to fixed notation:

                    QTextStream foo = ...;
                    foo.setRealNumberNotation(QTextStream::FixedNotation);
                    double bar = ...;
                    foo << bar;
                    

                    or pre-format the number the way you want it and pass the resulting string to the stream:

                    QTextStream foo = ...;
                    double bar = ...;
                    foo << QString::number(bar, 'f');
                    
                    T Offline
                    T Offline
                    tomy
                    wrote on 28 Jan 2017, 15:18 last edited by tomy
                    #9

                    @Chris-Kawa
                    What is ...ugh?! I want to learn it! :)

                    My code is like this:

                    QString s;
                    QTextStream (&s) << 12 ;
                    lineEdit -> setText(s); // It outputs 12 
                    s.clear();
                    
                    QTextStream (&s) << "ABC";
                    lineEdit -> setText(s); // This time it outputs ABC
                    
                    1 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      Chris Kawa
                      Lifetime Qt Champion
                      wrote on 28 Jan 2017, 15:34 last edited by
                      #10

                      12 is not a double, it's an int. 12.0 is a double and 12.0f is a float.
                      So anyway, like I said earlier, either

                      QString s;
                      QTextStream foo(&s);
                      foo.setRealNumberNotation(QTextStream::FixedNotation);
                      s << 12.0 ; //assuming you still want that double and not int
                      lineEdit -> setText(s);
                      

                      or

                      QString s;
                      QTextStream (&s) << QString::number(12.0, 'f');
                      lineEdit -> setText(s);
                      

                      but then it's kinda pointless, you can just directly do

                      lineEdit -> setText(QString::number(12.0, 'f'));
                      

                      ...ugh is the sound you can make when you don't have the energy to explain something, so you just skip it altogether ;)

                      T 1 Reply Last reply 28 Jan 2017, 15:56
                      2
                      • VRoninV Offline
                        VRoninV Offline
                        VRonin
                        wrote on 28 Jan 2017, 15:34 last edited by VRonin
                        #11

                        no need to use QTextStream in that case:

                        lineEdit->setText(lineEdit->locale().toString(1257.147862,'f'));

                        'f' prevents scientific notation, see http://doc.qt.io/qt-5/qstring.html#argument-formats

                        "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

                        T 1 Reply Last reply 28 Jan 2017, 15:42
                        0
                        • VRoninV VRonin
                          28 Jan 2017, 15:34

                          no need to use QTextStream in that case:

                          lineEdit->setText(lineEdit->locale().toString(1257.147862,'f'));

                          'f' prevents scientific notation, see http://doc.qt.io/qt-5/qstring.html#argument-formats

                          T Offline
                          T Offline
                          tomy
                          wrote on 28 Jan 2017, 15:42 last edited by
                          #12

                          @VRonin

                          lineEdit->setText(lineEdit->locale().toString(1257.147862,'f'));

                          There is no s in your lineEdit!

                          lineEdit -> setText( // here s should be put!)
                          
                          1 Reply Last reply
                          0
                          • VRoninV Offline
                            VRoninV Offline
                            VRonin
                            wrote on 28 Jan 2017, 15:51 last edited by
                            #13

                            ok, I guess...

                            QString s;
                            s=lineEdit->locale().toString(1257.147862,'f');
                            lineEdit -> setText(s);
                            

                            "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
                            1
                            • C Chris Kawa
                              28 Jan 2017, 15:34

                              12 is not a double, it's an int. 12.0 is a double and 12.0f is a float.
                              So anyway, like I said earlier, either

                              QString s;
                              QTextStream foo(&s);
                              foo.setRealNumberNotation(QTextStream::FixedNotation);
                              s << 12.0 ; //assuming you still want that double and not int
                              lineEdit -> setText(s);
                              

                              or

                              QString s;
                              QTextStream (&s) << QString::number(12.0, 'f');
                              lineEdit -> setText(s);
                              

                              but then it's kinda pointless, you can just directly do

                              lineEdit -> setText(QString::number(12.0, 'f'));
                              

                              ...ugh is the sound you can make when you don't have the energy to explain something, so you just skip it altogether ;)

                              T Offline
                              T Offline
                              tomy
                              wrote on 28 Jan 2017, 15:56 last edited by tomy
                              #14

                              @Chris-Kawa said in Showing numbers in decimal not scientific notation:

                              QString s;
                              QTextStream (&s) << QString::number(12.0, 'f');
                              lineEdit -> setText(s);
                              

                              I used it. It's fine for doubles but when I calculate ints (e.g., 2+3) it shows 5.000000!!
                              We should make it show the precision only when the result is a double number not an int.

                              kshegunovK 1 Reply Last reply 28 Jan 2017, 16:15
                              0
                              • T tomy
                                28 Jan 2017, 15:56

                                @Chris-Kawa said in Showing numbers in decimal not scientific notation:

                                QString s;
                                QTextStream (&s) << QString::number(12.0, 'f');
                                lineEdit -> setText(s);
                                

                                I used it. It's fine for doubles but when I calculate ints (e.g., 2+3) it shows 5.000000!!
                                We should make it show the precision only when the result is a double number not an int.

                                kshegunovK Offline
                                kshegunovK Offline
                                kshegunov
                                Moderators
                                wrote on 28 Jan 2017, 16:15 last edited by kshegunov
                                #15

                                @tomy said in Showing numbers in decimal not scientific notation:

                                I used it. It's fine for doubles but when I calculate ints (e.g., 2+3) it shows 5.000000!!
                                We should make it show the precision only when the result is a double number not an int.

                                You either calculate a double or an int, can't be both. Anyway, what you probably want is this:

                                double calculationResult = 12.0;
                                QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult)) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
                                

                                Read and abide by the Qt Code of Conduct

                                T 1 Reply Last reply 28 Jan 2017, 16:35
                                1
                                • kshegunovK kshegunov
                                  28 Jan 2017, 16:15

                                  @tomy said in Showing numbers in decimal not scientific notation:

                                  I used it. It's fine for doubles but when I calculate ints (e.g., 2+3) it shows 5.000000!!
                                  We should make it show the precision only when the result is a double number not an int.

                                  You either calculate a double or an int, can't be both. Anyway, what you probably want is this:

                                  double calculationResult = 12.0;
                                  QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult)) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
                                  
                                  T Offline
                                  T Offline
                                  tomy
                                  wrote on 28 Jan 2017, 16:35 last edited by tomy
                                  #16

                                  @kshegunov

                                  You either calculate a double or an int, can't be both.
                                  Anyway, what you probably want is this:

                                  How can it be acceptable!? All calculator around the world do calculations on both types. Furthermore, when I write 2.3+4.6, it shows: 6.900000!
                                  That is it works fine neither for ints nor for doubles.

                                  double calculationResult = 12.0;
                                  QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
                                  

                                  Ow my God! Isn't there any simpler way?
                                  Please have a look at Windows built-in calculator. See this how simple and nifty shows results.
                                  Do you say that behind that Windows' calculator there would be such a long statement just for showing numbers in decimal mode, if it were written by C++/Qt?

                                  kshegunovK VRoninV 2 Replies Last reply 28 Jan 2017, 16:40
                                  0
                                  • T tomy
                                    28 Jan 2017, 16:35

                                    @kshegunov

                                    You either calculate a double or an int, can't be both.
                                    Anyway, what you probably want is this:

                                    How can it be acceptable!? All calculator around the world do calculations on both types. Furthermore, when I write 2.3+4.6, it shows: 6.900000!
                                    That is it works fine neither for ints nor for doubles.

                                    double calculationResult = 12.0;
                                    QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
                                    

                                    Ow my God! Isn't there any simpler way?
                                    Please have a look at Windows built-in calculator. See this how simple and nifty shows results.
                                    Do you say that behind that Windows' calculator there would be such a long statement just for showing numbers in decimal mode, if it were written by C++/Qt?

                                    kshegunovK Offline
                                    kshegunovK Offline
                                    kshegunov
                                    Moderators
                                    wrote on 28 Jan 2017, 16:40 last edited by kshegunov
                                    #17

                                    @tomy said in Showing numbers in decimal not scientific notation:

                                    How can it be acceptable!? All calculator around the world do calculations on both types. Furthermore, when I write 2.3+4.6, it shows: 6.900000!

                                    No they do calculation in the widest possible type they support (here it's double) and then display the result as appropriate. Further reading on implicit type promotions in c++ can be found here

                                    Ow my God! Isn't there any simpler way?

                                    This is a simple if-else statement with the notable exception that it compares floating point values as they should be compared.

                                    Do you say that behind that Windows' calculator there would be such a long statement just for showing numbers in decimal mode, if it were written by C++/Qt?

                                    Yes, I'm sure of it. It's probably even much longer as windows is actually written in C.

                                    Read and abide by the Qt Code of Conduct

                                    1 Reply Last reply
                                    1
                                    • T Offline
                                      T Offline
                                      tomy
                                      wrote on 28 Jan 2017, 16:49 last edited by tomy
                                      #18

                                      I used this:

                                      ss = qFuzzyCompare(expression(),
                                                       static_cast<qint64>(expression()) ?
                                                       QString::number(static_cast<qint64>(expression())) :
                                                       QString::number(expression(), 'f'));
                                       result_box -> setText(ss);
                                      

                                      ss is a QString.
                                      expression() returns an int or double value.
                                      result_box is a lineEdit which shows the result of the calculations.

                                      I get this error:
                                      C:\Users\ME\Documents\Qt\My_First_Calculator\my_first_calculator.cpp:81: error: no matching function for call to 'qFuzzyCompare(double, QString)'
                                      QString::number(expression(), 'f'));
                                      ^

                                      kshegunovK 1 Reply Last reply 28 Jan 2017, 16:52
                                      0
                                      • T tomy
                                        28 Jan 2017, 16:49

                                        I used this:

                                        ss = qFuzzyCompare(expression(),
                                                         static_cast<qint64>(expression()) ?
                                                         QString::number(static_cast<qint64>(expression())) :
                                                         QString::number(expression(), 'f'));
                                         result_box -> setText(ss);
                                        

                                        ss is a QString.
                                        expression() returns an int or double value.
                                        result_box is a lineEdit which shows the result of the calculations.

                                        I get this error:
                                        C:\Users\ME\Documents\Qt\My_First_Calculator\my_first_calculator.cpp:81: error: no matching function for call to 'qFuzzyCompare(double, QString)'
                                        QString::number(expression(), 'f'));
                                        ^

                                        kshegunovK Offline
                                        kshegunovK Offline
                                        kshegunov
                                        Moderators
                                        wrote on 28 Jan 2017, 16:52 last edited by
                                        #19

                                        @tomy said in Showing numbers in decimal not scientific notation:

                                        expression() returns an int or double value.

                                        I'm pretty sure that functions returns a string, not an int, nor a double. You need to convert the string to an actual number if you want to use it as such, e.g. see here.

                                        Read and abide by the Qt Code of Conduct

                                        T 1 Reply Last reply 28 Jan 2017, 17:00
                                        0
                                        • kshegunovK kshegunov
                                          28 Jan 2017, 16:52

                                          @tomy said in Showing numbers in decimal not scientific notation:

                                          expression() returns an int or double value.

                                          I'm pretty sure that functions returns a string, not an int, nor a double. You need to convert the string to an actual number if you want to use it as such, e.g. see here.

                                          T Offline
                                          T Offline
                                          tomy
                                          wrote on 28 Jan 2017, 17:00 last edited by tomy
                                          #20

                                          @kshegunov

                                          expression() returns an int or double value.

                                          I'm pretty sure that functions returns a string, not an int, nor a double.

                                          Don't be that sure. :)
                                          I have this method in my code:

                                          double My_First_Calculator::expression()
                                          

                                          But I think this error is of that ss is a QString.

                                          kshegunovK 1 Reply Last reply 28 Jan 2017, 21:39
                                          0

                                          3/41

                                          28 Jan 2017, 13:54

                                          topic:navigator.unread, 38
                                          • Login

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