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; }

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

    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 1 Reply Last reply
    0
    • A Alan N

      On which line does the compiler show the error? My guess is it goes wrong at

      return Refurb_Rate;

      as the method return type is Int32. If you were to change the declaration of Refurb_Rate from Double to Int32 then the problem would go away. I'm not sure what you are trying to do in the line

      Refurb_Rate = Convert.ToInt32( totalRefurb / totalUnits * 100);

      It doesn't make much sense as the result of the expression on the RHS is already Int32 making the explicit conversion redundant. Alan.

      J Offline
      J Offline
      Justiin1265
      wrote on last edited by
      #11

      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 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; }

        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