How can I divide two integers to get a double?
Asked Answered
I

9

374

How do I divide two integers to get a double?

Ify answered 19/3, 2009 at 4:9 Comment(2)
Assuming this was asked in an interview - integer division always results in integer. You must use a type cast like the ones shown below.Deportation
Different types of divisions: Integer ,Floating-point ,Decimal -discussed in Why integer division in c# returns an integer but not a float?Vagrom
I
576

You want to cast the numbers:

double num3 = (double)num1/(double)num2;

Note: If any of the arguments in C# is a double, a double divide is used which results in a double. So, the following would work too:

double num3 = (double)num1/num2;

For more information see:

Dot Net Perls

Insuperable answered 19/3, 2009 at 4:14 Comment(6)
Don't know if this is the same in C#, but C only requires you to cast the first - it'll automatically make double/int a double.Rubinrubina
@Pax, If any of the args in C or C# are a double, a double divide is used (resulting in a double).Manda
Be careful not to do this:- double num3 = (double)(num1/num2);. This will just give you a double representation of the result of the integer division!Interphone
Supposing you don't need the extra precision, is there a reason to cast to double instead of float? I can see the question calls for double but I'm curious anyway.Antarctic
@KyleDelaney Just cause in C# we normally use double and not float. When you write a variable just like var a = 1.0;, this 1.0 is always a double. I guess this is the main reason.Selfaddressed
Yes, in VB 1/2 is 1. (FML right?) Cdec(1) / Cdec(2) = 0.5Hamill
M
49

Complementing the @NoahD's answer

To have a greater precision you can cast to decimal:

(decimal)100/863
//0.1158748551564310544611819235

Or:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Double are represented allocating 64 bits while decimal uses 128

(double)100/863
//0.11587485515643106

In depth explanation of "precision"

For more details about the floating point representation in binary and its precision take a look at this article from Jon Skeet where he talks about floats and doubles and this one where he talks about decimals.

Melodee answered 12/12, 2014 at 18:24 Comment(4)
Wrong! double has a precision of 53 bits, and it's a binary floating-point format, whereas decimal is a... decimal one, of course, with 96 bits of precision. So double is precise to ~15-17 decimal digits and decimal 28-29 digits (and not twice the precision of double). More importantly decimal actually uses only 102 of the 128 bitsEnglishry
Thanks @phuclv, fixed that. I meant "space allocation". You were right about the precision of decimals (96), but doubles has 52 bits of mantissa, not 53.Melodee
yes, the mantissa has 52 bits, but there's still a hidden bit, resulting in a 53-bit significand. Is it 52 or 53 bits of floating point precision?Englishry
Decimal.Divide was great! ThxCharlie
A
10

cast the integers to doubles.

Avast answered 19/3, 2009 at 4:12 Comment(1)
To be specific, you can cast an integer to a double like so: (double)myIntegerValuePinch
C
9

Convert one of them to a double first. This form works in many languages:

 real_result = (int_numerator + 0.0) / int_denominator
Cahill answered 19/3, 2009 at 4:12 Comment(2)
Easier to just do... var result = 1.0 * a / b;Hollyanne
@Hollyanne there's 100 ways to do it. I prefer addition just because it's faster, although casting is obviously faster still.Cahill
I
4
var firstNumber=5000,
secondeNumber=37;

var decimalResult = decimal.Divide(firstNumber,secondeNumber);

Console.WriteLine(decimalResult );
Ideography answered 10/5, 2017 at 10:1 Comment(1)
The question seems to call for double and not decimal.Antarctic
B
4
var result = decimal.ToDouble(decimal.Divide(5, 2));
Boneblack answered 17/12, 2020 at 13:49 Comment(2)
5 = first number, 2 = second numberBoneblack
You can edit your post to add information. Please don't add it in commentsThaddeus
J
1

In the comment to the accepted answer there is a distinction made which seems to be worth highlighting in a separate answer.

The correct code:

double num3 = (double)num1/(double)num2;

is not the same as casting the result of integer division:

double num3 = (double)(num1/num2);

Given num1 = 7 and num2 = 12:

The correct code will result in num3 = 0.5833333

Casting the result of integer division will result in num3 = 0.00

Jersey answered 10/2, 2023 at 0:40 Comment(1)
Ok, makes sense. Added link to comment.Jersey
E
0

I have went through most of the answers and im pretty sure that it's unachievable. Whatever you try to divide two int into double or float is not gonna happen. But you have tons of methods to make the calculation happen, just cast them into float or double before the calculation will be fine.

Eternalize answered 25/12, 2020 at 1:18 Comment(1)
Hello and welcome to SO! Please read the tour, and How do I write a good answer? Please make sure to include new information (that is not in the other answers) in your answer.Velvetvelveteen
S
0

The easiest way to do that is adding decimal places to your integer.

Ex.:

var v1 = 1 / 30 //the result is 0
var v2 = 1.00 / 30.00 //the result is 0.033333333333333333
Sites answered 29/12, 2021 at 21:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.