This question already has answers here:
Double division behaving wrongly
(4 answers)
Closed 7 years ago.
Noob Question.
double answer = 13/5;
System.out.println(answer);
Why does that return 2 instead of 2.6.
As in must i say
(double) 13/5
everytime i want to print a double.
you must tell java that you want a double division:
double answer = 13/5.0; // or 13 / (double) 5.0
13 and 5 are integers. That means that you divide them as integers. As a result, you will get an integer. So what you have to do is to cast them as double like that:
double answer = 13 / (double) 5;
Or write them like that:
double answer = 13 / 5.0;
Because 13 and 5 are integers, so the result will be an integer that you are assigning to a double variable
You need to specify your numbers should be considered as double
The division takes place between two ints and the result is also an int which is finally cast into a double. You should declare the operands as doubles to get the desired result.
Related
This question already has answers here:
Int division: Why is the result of 1/3 == 0?
(19 answers)
How to make the division of 2 ints produce a float instead of another int?
(9 answers)
Division of integers in Java [duplicate]
(7 answers)
Closed 5 years ago.
So I'm trying to do math on ints stored in an array of ints.
float day1Hours = (day1[3]-day1[2]) / 2;
for this specific problem, day1[3] = 19 and day1[2] is 10. So, it should be doing 19-10 = 9, and then dividing that by 2 to make 4.5. But, the output that I am getting is 4. I've also tried storing day1Hours as a double but that made no difference. How would I make this be able to do the math correctly and get those decimal values that I need?
The problem is that you are doing integer division and then converting to a float. Try
float day1Hours = (day1[3]-day1[2]) / 2.0f;
Using a float literal in the denominator will cause the division to be done in floating point, and you won't get integer truncation. (As an alternative to using a float literal, you could cast the numerator or denominator to a float, but that seems somewhat baroque to me. It would be more suitable if both the numerator and denominator were int variables.)
The reason that just changing the type of day1Hours doesn't affect the problem is that the entire right side is evaluated first using the declared data type of day1 and then converted to whatever type is on the left of the assignment.
float day1Hours = (float)(20-9) / 2; //5.5
Problem is that on the right side of equation the numbers are integers and when dividing 2 integers the decimal places are truncated (integer division rounds towards zero) 4.5 -> 4.0.
Try changing 2 -> 2f so the 2 would be considered a float instead of an integer.
This question already has answers here:
How to make the division of 2 ints produce a float instead of another int?
(9 answers)
Closed 7 years ago.
double multiply()
{
double x=(2/3)*3.14*1.02;
System.out.print(x);
double y=0.666*3.14*1.02; /*(2/3)=0.666...*/
System.out.print(y);
}
Output:
x=0.0
y=SomeNumber
please explain this?
(2/3) is 0.
because both are integers. To solve this, use a cast or make it clear that your number is not an integer:
double x=(2/3d)*3.14*1.02;
Now you have an integer divided by a double, which results in a double.
Some more to read about this:
http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.html
(2/3) is computed first (because of the parentheses), and in integer arithmetic (since the number literals are of type int). The fractional part is discarded.
It is therefore an int type with a value of 0. The entire expression is therefore zero.
The obvious remedy is to remove the parentheses and write 2.0 / 3.0 instead. Some folk prefer an explicit cast, but I find that ugly.
2/3 = 0 because they don't have explicit cast to double they are integers. The whole expression becomes: double x=0*3.14*1.02;
which is 0.
because data type of both 2 and 3 is int and int/int gives you int which in your case 2/3 is 0.
Try using 2.0/3 or 2/3.0 you will get the required answer.
Suffix every number with a 'd' to be sure you are dealing with doubles
This question already has answers here:
Why does the division of two integers return 0.0 in Java? [duplicate]
(6 answers)
Why does this Java division print out zero? [duplicate]
(5 answers)
Closed 8 years ago.
I am using Java 1.6
final double check = 3 / 4;
System.out.println(check);
Console is showing: 0.0
Why is this happening? Shouldn't it come out 0.75?
Make that:
double check = 3.0 / 4;
and it'll work. You got 0 because 3 / 4 is an integer division, whose value is 0.
Because both are integer hence result will also be integer.
Cast any one into double like this:
double check = (double)3 / 4;
By doing:
3 / 4
you are performing an integer division, since 3 and 4 are int constants, not doubles. The result is therefore an int. But since you are assigning it to a double, the result of the division will then be promoted to a double. But at this point it is too late, since the integer division will have produced 0!
You need to do:
3.0 / 4
to achieve your desired result, since in this case, 4 will automatically be promoted to a double, and the result of the division will also be a double.
To be perfectly sure of what happens and if you like symmetry, you can also write:
3.0 / 4.0
You are dividing integers and assigning the result to double.In java division of two int values always yields an int.
So change the statement double check = 3 / 4; to double check = 3.0 / 4;
This question already has answers here:
Why double width = 50/110000; the output is 0.000000000000000?
(3 answers)
Closed 9 years ago.
double overallMark = ((20/100) * homeworkAverage) + ((80/100) * examinationAverage);
Is something wrong with my syntax? I'm getting 0.0 as an answer :(
I need to add 20% of homeworkAverage to 80% of examinationAverage!
You are performing integer division with 20/100, and in Java, dividing ints yields an int, the truncated quotient.
Cast one of them as a double or use double literals to force floating-point division:
((double) 20 / 100)
or
(20.0 / 100.0)
... and similarly you'll need to change (80/100).
20/100 becomes 0 because of integer division.
Try changing it to 20.0/100.0 so that doubles are used instead.
This question already has answers here:
How to make the division of 2 ints produce a float instead of another int?
(9 answers)
Closed 9 years ago.
I'm trying to do a very basic operation as follows:
double a=21/5;
System.out.println(a);
However, each time I get 4.0 as the output and not 4.2. I'm encountering this for the first time. I've been using Java for years, but never came across this obscurity.
You are using integer division, which result will always be integer
You should use something like this.
double a=(double)21/5;
You are doing integer division...
Try:
double a = 21.0/5;
Cast the division or specify one of the arguments as a decimal to force the return as a double:
double a = (double)21/5;
-or-
double a = 21.0/5;
Just cast one of the numbers to double:
double a = 21/5.0;
Force the cast to double.
double a = 21.0/5
This is called Arithmetic promotion. This means that all terms in an equation are made equal to the variable type with the highest precision. In this case double.