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.
  • 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 Offline
            JonBJ Offline
            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 Offline
                JonBJ Offline
                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 Offline
                    JonBJ Offline
                    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 Offline
                        JonBJ Offline
                        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 Offline
                            JonBJ Offline
                            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