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. Problem with real values
Forum Updated to NodeBB v4.3 + New Features

Problem with real values

Scheduled Pinned Locked Moved Unsolved General and Desktop
14 Posts 6 Posters 1.4k Views 2 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.
  • clostridium_difficileC Offline
    clostridium_difficileC Offline
    clostridium_difficile
    wrote on last edited by
    #1

    Hello, I divide two integer numbers like this:

    qreal scaleFactorX = ui->workSpace->width() / width;
    

    but in my application it equals 0 (zero!). qDebug prints 0 and debbuger shows it is 0. How to repair it, whats wrong with this code?

    JonBJ 1 Reply Last reply
    0
    • Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @clostridium_difficile said in Problem with real values:

      but in my application it equals 0

      Everything else would surprise me - C basics. Doing arithmetics with integer values will result in an integer value.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      1 Reply Last reply
      5
      • clostridium_difficileC Offline
        clostridium_difficileC Offline
        clostridium_difficile
        wrote on last edited by
        #3

        @Christian-Ehrlicher said in Problem with real values:

        @clostridium_difficile said in Problem with real values:

        but in my application it equals 0

        Everything else would surprise me - C basics. Doing arithmetics with integer values will result in an integer value.

        Well, dividing two integer values and assgning result to qreal, should be casted to double, shouldn't it?

        1 Reply Last reply
        0
        • Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @clostridium_difficile said in Problem with real values:

          should be casted to double, shouldn't it?

          For sure, the result of the aritmetic will be casted to the left hand side type.

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          1 Reply Last reply
          4
          • mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #5

            Hi
            Beware of dragons

            qreal scaleFactorX = 10 / 3; == 3

            qreal scaleFactorX = 10 / 3.0 == 3.33333;

            qreal scaleFactorX = static_cast<float>(10) / 3; == 3.33333;

            the reason is that 2 ints will use the integer division version of operator / so
            even when you assign it to a double the precision is lost.

            1 Reply Last reply
            7
            • clostridium_difficileC clostridium_difficile

              Hello, I divide two integer numbers like this:

              qreal scaleFactorX = ui->workSpace->width() / width;
              

              but in my application it equals 0 (zero!). qDebug prints 0 and debbuger shows it is 0. How to repair it, whats wrong with this code?

              JonBJ Online
              JonBJ Online
              JonB
              wrote on last edited by
              #6

              @clostridium_difficile said in Problem with real values:

              qreal scaleFactorX = ui->workSpace->width() / width;

              qreal scaleFactorX = ((qreal)ui->workSpace->width()) / width;

              J.HilkJ 1 Reply Last reply
              3
              • JonBJ JonB

                @clostridium_difficile said in Problem with real values:

                qreal scaleFactorX = ui->workSpace->width() / width;

                qreal scaleFactorX = ((qreal)ui->workSpace->width()) / width;

                J.HilkJ Offline
                J.HilkJ Offline
                J.Hilk
                Moderators
                wrote on last edited by
                #7

                @JonB
                uuh, c-style cast 😨

                still an upvote as you're technically correct, the best kind of correct.


                Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                Q: What's that?
                A: It's blue light.
                Q: What does it do?
                A: It turns blue.

                JonBJ 1 Reply Last reply
                4
                • J.HilkJ J.Hilk

                  @JonB
                  uuh, c-style cast 😨

                  still an upvote as you're technically correct, the best kind of correct.

                  JonBJ Online
                  JonBJ Online
                  JonB
                  wrote on last edited by JonB
                  #8

                  @J-Hilk
                  Oh dear, damn! Really, you want me to write:

                  qreal scaleFactorX = static_cast<qreal>(ui->workSpace->width()) / width;

                  is that right?

                  Oh, now I see that's effectively what @mrjj wrote at the end of his examples, I hadn't noticed, sorry.

                  kshegunovK 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @J-Hilk
                    Oh dear, damn! Really, you want me to write:

                    qreal scaleFactorX = static_cast<qreal>(ui->workSpace->width()) / width;

                    is that right?

                    Oh, now I see that's effectively what @mrjj wrote at the end of his examples, I hadn't noticed, sorry.

                    kshegunovK Offline
                    kshegunovK Offline
                    kshegunov
                    Moderators
                    wrote on last edited by
                    #9

                    @JonB said in Problem with real values:

                    is that right?

                    As we are long done with this question anyway, you could use constructor-style cast instead:

                    qreal scaleFactorX = ui->workSpace->width() / qreal(width);
                    

                    (moved it to the end for readability)

                    Read and abide by the Qt Code of Conduct

                    JonBJ 1 Reply Last reply
                    0
                    • kshegunovK kshegunov

                      @JonB said in Problem with real values:

                      is that right?

                      As we are long done with this question anyway, you could use constructor-style cast instead:

                      qreal scaleFactorX = ui->workSpace->width() / qreal(width);
                      

                      (moved it to the end for readability)

                      JonBJ Online
                      JonBJ Online
                      JonB
                      wrote on last edited by
                      #10

                      @kshegunov
                      Indeed you could. All this fuss effectively over qreal(width) versus (qreal)width ;-)

                      kshegunovK 1 Reply Last reply
                      0
                      • JonBJ JonB

                        @kshegunov
                        Indeed you could. All this fuss effectively over qreal(width) versus (qreal)width ;-)

                        kshegunovK Offline
                        kshegunovK Offline
                        kshegunov
                        Moderators
                        wrote on last edited by
                        #11

                        @JonB said in Problem with real values:

                        All this fuss

                        There's no fuss. They're exactly the same - a C-style cast.

                        Read and abide by the Qt Code of Conduct

                        JonBJ 1 Reply Last reply
                        0
                        • kshegunovK kshegunov

                          @JonB said in Problem with real values:

                          All this fuss

                          There's no fuss. They're exactly the same - a C-style cast.

                          JonBJ Online
                          JonBJ Online
                          JonB
                          wrote on last edited by JonB
                          #12

                          @kshegunov said in Problem with real values:

                          They're exactly the same - a C-style cast.

                          Oh dear! I thought we went through this a while ago. You don't really mean they are exactly the same, do you? Only because it's qreal here? If it were ClassName(variable) it would be an instance creation instead of a cast, wouldn't it?

                          kshegunovK 1 Reply Last reply
                          0
                          • JonBJ JonB

                            @kshegunov said in Problem with real values:

                            They're exactly the same - a C-style cast.

                            Oh dear! I thought we went through this a while ago. You don't really mean they are exactly the same, do you? Only because it's qreal here? If it were ClassName(variable) it would be an instance creation instead of a cast, wouldn't it?

                            kshegunovK Offline
                            kshegunovK Offline
                            kshegunov
                            Moderators
                            wrote on last edited by
                            #13

                            @JonB said in Problem with real values:

                            I thought we went through this a while ago.

                            We may've, I don't remember ... and I'm bored so I have nothing better to do than to argue uselessly ... :)

                            If it were ClassName(variable) it would be an instance creation instead of a cast, wouldn't it?

                            This is where C++ really shines ... in its stupidity. It's going to be trying a cast if it can't match a suitable constructor, but if there is a matching constructor you're going to get an anonymous object ... fun, ain't it? And compilers differ in their interpretation ... I've had this:

                            QMutex x;
                            {
                               QMutexLocker(&x);
                            }
                            

                            generate "can't cast to QMutexLocker" error with MSVC, but fly seamlessly through gcc ... that language, go figure ...

                            Read and abide by the Qt Code of Conduct

                            JonBJ 1 Reply Last reply
                            0
                            • kshegunovK kshegunov

                              @JonB said in Problem with real values:

                              I thought we went through this a while ago.

                              We may've, I don't remember ... and I'm bored so I have nothing better to do than to argue uselessly ... :)

                              If it were ClassName(variable) it would be an instance creation instead of a cast, wouldn't it?

                              This is where C++ really shines ... in its stupidity. It's going to be trying a cast if it can't match a suitable constructor, but if there is a matching constructor you're going to get an anonymous object ... fun, ain't it? And compilers differ in their interpretation ... I've had this:

                              QMutex x;
                              {
                                 QMutexLocker(&x);
                              }
                              

                              generate "can't cast to QMutexLocker" error with MSVC, but fly seamlessly through gcc ... that language, go figure ...

                              JonBJ Online
                              JonBJ Online
                              JonB
                              wrote on last edited by
                              #14

                              @kshegunov said in Problem with real values:

                              This is where C++ really shines ... in its stupidity. It's going to be trying a cast if it can't match a suitable constructor, but if there is a matching constructor you're going to get an anonymous object ... fun, ain't it?

                              Ah ha! That at least explains it, a bit :) Phew! I thought you were going to shoot me down!

                              What I had in mind is: when I see (Something)something I just know it's a cast (yes, static_cast<> is better). But when I see Something(something) am I looking at a function call, an initializer, a cast, even (yikes!) a macro, ...? So personally I wouldn't use that one for a cast, it has enough other uses already!

                              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