Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. How do I cast a double to an int?

How do I cast a double to an int?

Scheduled Pinned Locked Moved C#
databasehelpquestionxml
21 Posts 7 Posters 11 Views 1 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.
  • J Justiin1265

    Hi, I have a program for work that uses a formula to calculate the refurb on a unit(parts replaced on cableboxes that were damaged) divided by total units(cableboxes that went through refurb, but did not have any parts replaced). I looked up casting online, and the format for it is intvaluetoconvert = Convert.toint32; I'm doing that , but still get the error Cannot implicitly convert type 'double to int. An explicit conversion exists(are you missing a cast?) What am I doing wrong? Can someone please help? Thank you. Justin Here's some of my code to look at? private int GetRefurbRate() { string sql = ""; double Refurb_Rate; int totalRefurb = 0; int totalUnits = 0; string error_msg = ""; sql = "SELECT COUNT(rp.repair_ord) " + "FROM " + schema + ".repair_part rp " + "WHERE rp.repair_ord = '" + repair_ord + "' "; while (true) { if (!myDb.RunSql(sql, true)) { error_msg = "DBError for getting Refurb Rate"; break; } if (myDb.dbRdr.HasRows) { if (myDb.dbRdr.Read()) { try //Try and Catch are here b/c I originally had everything ints, and and they just caught the 0 exception. { Refurb_Rate = Convert.ToInt32( totalRefurb / totalUnits * 100); //This is where I try to perform the cast. } catch (Exception e) { Console.WriteLine(e); } } //int Refurb_Rate = Convert.ToInt32(Refurb_Rate); } break; } myDb.dbRdr.Close(); if (error_msg != String.Empty) { MessageBox.Show(error_msg, "Get Refurb Rate", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } return Refurb_Rate; }

    L Offline
    L Offline
    Luc Pattyn
    wrote on last edited by
    #12

    Justiin1265 wrote:

    Refurb_Rate = Convert.ToInt32( totalRefurb / totalUnits * 100); //This is where I try to perform the cast.

    this does not make sense, as all variables are declared integers, therefore the quotient will be integer too, and the Convert method does nothing for you. Furthermore, the result will not be what you expect: for totalRefurb=2, totalUnits=10, the formula looks like 2 / 10 * 100, unfortunately in an integer world 2 / 10 is zero. What you need to do is one of the following: - multiply first, i.e. 100 * totalRefurb / totalUnits - use real numbers (i.e. data types such as float or double), this will avoid overflow (when your integers near the max value), and perform rounding. :)

    Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum

    Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.

    modified on Monday, April 11, 2011 3:25 PM

    A D 2 Replies Last reply
    0
    • A AspDotNetDev

      I have a program for work that uses a formula to calculate the refurb on a unit (parts replaced on cableboxes that were damaged) divided by total units(cableboxes that went through refurb, but did not have any parts replaced). I looked up casting online, and the format for it is intvaluetoconvert = Convert.toint32; I'm doing that, but still get the error "Cannot implicitly convert type double to int. An explicit conversion exists (are you missing a cast?)" What am I doing wrong? Here's some of my code to look at:

      private int GetRefurbRate()
      {
      string sql = "";
      double Refurb_Rate;
      int totalRefurb = 0;
      int totalUnits = 0;
      string error_msg = "";

      sql = "SELECT COUNT(rp.repair\_ord) " +
          "FROM " + schema + ".repair\_part rp " +
          "WHERE rp.repair\_ord = '" + repair\_ord + "' ";
      while (true)
      {
          if (!myDb.RunSql(sql, true))
          {
              error\_msg = "DBError for getting Refurb Rate";
              break;
          }
          if (myDb.dbRdr.HasRows)
          {
              if (myDb.dbRdr.Read())
              {
                  try //Try and Catch are here b/c I originally had everything ints, and and they just caught the 0 exception.
                  {
                      Refurb\_Rate = Convert.ToInt32( totalRefurb / totalUnits \* 100); //This is where I try to perform the cast.
                  }
                  catch (Exception e)
                  {
                      Console.WriteLine(e);
                  }
              }
      
              //int Refurb\_Rate = Convert.ToInt32(Refurb\_Rate);
          }
      
          break;
      }
      myDb.dbRdr.Close();
      
      if (error\_msg != String.Empty)
      {
          MessageBox.Show(error\_msg, "Get Refurb Rate",
          MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
      }
      
      return Refurb\_Rate;
      

      }

      Flummery:

      This is not the age of reason, this is the age of flummery, and the day of the devious approach. Reason’s gone into the backrooms where it works to devise means by which people can be induced to emote in the desired direction.

      L Offline
      L Offline
      Luc Pattyn
      wrote on last edited by
      #13

      Congrats on the PRE tags, however the percentage formula isn't quite OK... see my other msg. :)

      Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum

      Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.

      1 Reply Last reply
      0
      • L Luc Pattyn

        Justiin1265 wrote:

        Refurb_Rate = Convert.ToInt32( totalRefurb / totalUnits * 100); //This is where I try to perform the cast.

        this does not make sense, as all variables are declared integers, therefore the quotient will be integer too, and the Convert method does nothing for you. Furthermore, the result will not be what you expect: for totalRefurb=2, totalUnits=10, the formula looks like 2 / 10 * 100, unfortunately in an integer world 2 / 10 is zero. What you need to do is one of the following: - multiply first, i.e. 100 * totalRefurb / totalUnits - use real numbers (i.e. data types such as float or double), this will avoid overflow (when your integers near the max value), and perform rounding. :)

        Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum

        Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.

        modified on Monday, April 11, 2011 3:25 PM

        A Offline
        A Offline
        AspDotNetDev
        wrote on last edited by
        #14

        I deleted my crap responses. Yours is more... what is the word? Oh yes, "correct". :)

        Flummery:

        This is not the age of reason, this is the age of flummery, and the day of the devious approach. Reason’s gone into the backrooms where it works to devise means by which people can be induced to emote in the desired direction.

        L 1 Reply Last reply
        0
        • A AspDotNetDev

          I deleted my crap responses. Yours is more... what is the word? Oh yes, "correct". :)

          Flummery:

          This is not the age of reason, this is the age of flummery, and the day of the devious approach. Reason’s gone into the backrooms where it works to devise means by which people can be induced to emote in the desired direction.

          L Offline
          L Offline
          Luc Pattyn
          wrote on last edited by
          #15

          "More correct"? A purist might object, some characteristics really are binary. :-D I'm not saying it is correct now (I still don't get what the OP is after), I do think one more problem has been addressed though.

          Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum

          Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.

          1 Reply Last reply
          0
          • J Justiin1265

            It shows the error at Refurb_Rate = Convert.ToInt32( totalRefurb / totalUnits * 100); I'm trying to convert the doulbe back to an integer, so I figured use the conversion syntax to return to an integer.

            A Offline
            A Offline
            AspDotNetDev
            wrote on last edited by
            #16

            Refurb_Rate is a double, so when you return it later on, it is still holding a double (even though that double may happen to be integral). Since your function is of return type "int", you need to ensure you return data type "int". Luc addresses some other issues with your code below.

            Flummery:

            This is not the age of reason, this is the age of flummery, and the day of the devious approach. Reason’s gone into the backrooms where it works to devise means by which people can be induced to emote in the desired direction.

            1 Reply Last reply
            0
            • L Luc Pattyn

              Justiin1265 wrote:

              Refurb_Rate = Convert.ToInt32( totalRefurb / totalUnits * 100); //This is where I try to perform the cast.

              this does not make sense, as all variables are declared integers, therefore the quotient will be integer too, and the Convert method does nothing for you. Furthermore, the result will not be what you expect: for totalRefurb=2, totalUnits=10, the formula looks like 2 / 10 * 100, unfortunately in an integer world 2 / 10 is zero. What you need to do is one of the following: - multiply first, i.e. 100 * totalRefurb / totalUnits - use real numbers (i.e. data types such as float or double), this will avoid overflow (when your integers near the max value), and perform rounding. :)

              Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum

              Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.

              modified on Monday, April 11, 2011 3:25 PM

              D Offline
              D Offline
              David1987
              wrote on last edited by
              #17

              Hey now, neither float nor double can represent all reals. They can only represent (some) rationals (and -0, NaN, +/-Infinity).

              L 1 Reply Last reply
              0
              • D David1987

                Hey now, neither float nor double can represent all reals. They can only represent (some) rationals (and -0, NaN, +/-Infinity).

                L Offline
                L Offline
                Luc Pattyn
                wrote on last edited by
                #18

                David1987 wrote:

                neither float nor double can represent all reals

                I agree (and I'll add nothing can represent just any real number's value); I also didn't say such thing. :)

                Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum

                Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.

                D 1 Reply Last reply
                0
                • L Luc Pattyn

                  David1987 wrote:

                  neither float nor double can represent all reals

                  I agree (and I'll add nothing can represent just any real number's value); I also didn't say such thing. :)

                  Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum

                  Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.

                  D Offline
                  D Offline
                  David1987
                  wrote on last edited by
                  #19

                  No.. but you said "real numbers" and "float" in the same sentence, it might give people the wrong idea. I've known plenty of people who were told by a teacher that doubles are "real numbers" (which is almost true if it's put like that - except for NaN and infinities and -0) and they were all confused and surprised when their calculations gave the "wrong" results because they expected all reals to be representable by doubles.

                  L 1 Reply Last reply
                  0
                  • D David1987

                    No.. but you said "real numbers" and "float" in the same sentence, it might give people the wrong idea. I've known plenty of people who were told by a teacher that doubles are "real numbers" (which is almost true if it's put like that - except for NaN and infinities and -0) and they were all confused and surprised when their calculations gave the "wrong" results because they expected all reals to be representable by doubles.

                    L Offline
                    L Offline
                    Luc Pattyn
                    wrote on last edited by
                    #20

                    Yes, it would have been better to put float and real in code-style. I'll fix that. I use "real numbers" for non-integer numbers (or better yet, numbers not restricted to integer values), and not for "exact numbers". Most programmers do it that way; it may originate in the old days of Fortran, where they had type REAL (there wasn't a FLOAT time then). And calculus (as well as programming) courses should teach people about number representations, errors, accumulation and propagation of errors, etc. Most programmers understand the square root of two isn't exact inside a computer, yet many have a hard time understanding why one third times three isn't always one. :)

                    Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum

                    Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.

                    1 Reply Last reply
                    0
                    • J Justiin1265

                      Hi, I have a program for work that uses a formula to calculate the refurb on a unit(parts replaced on cableboxes that were damaged) divided by total units(cableboxes that went through refurb, but did not have any parts replaced). I looked up casting online, and the format for it is intvaluetoconvert = Convert.toint32; I'm doing that , but still get the error Cannot implicitly convert type 'double to int. An explicit conversion exists(are you missing a cast?) What am I doing wrong? Can someone please help? Thank you. Justin Here's some of my code to look at? private int GetRefurbRate() { string sql = ""; double Refurb_Rate; int totalRefurb = 0; int totalUnits = 0; string error_msg = ""; sql = "SELECT COUNT(rp.repair_ord) " + "FROM " + schema + ".repair_part rp " + "WHERE rp.repair_ord = '" + repair_ord + "' "; while (true) { if (!myDb.RunSql(sql, true)) { error_msg = "DBError for getting Refurb Rate"; break; } if (myDb.dbRdr.HasRows) { if (myDb.dbRdr.Read()) { try //Try and Catch are here b/c I originally had everything ints, and and they just caught the 0 exception. { Refurb_Rate = Convert.ToInt32( totalRefurb / totalUnits * 100); //This is where I try to perform the cast. } catch (Exception e) { Console.WriteLine(e); } } //int Refurb_Rate = Convert.ToInt32(Refurb_Rate); } break; } myDb.dbRdr.Close(); if (error_msg != String.Empty) { MessageBox.Show(error_msg, "Get Refurb Rate", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } return Refurb_Rate; }

                      C Offline
                      C Offline
                      charles henington
                      wrote on last edited by
                      #21

                      Give this a try this should fix your problem;

                      return (int)Refurb_Rate;

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups