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
    #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