Java not doing math to decimal places [duplicate] - java

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.

Related

Integer vs Double multiplication gives very strange output [duplicate]

This question already has answers here:
Is floating point math broken?
(31 answers)
Java double precision sum trouble
(2 answers)
Closed 6 years ago.
When I am trying to multiply 3 (Integer type) with 112.1 (Double) then the result I get contains many decimal points.
Integer a=3;
Double b=112.1;
Double result=a*b = 336.29999999999995
But when we multiply 2 (Integer) with 112.1 (Double) then decimal point is so minimal.
Integer a=2;
Double b=112.1;
Double result=a*b = 224.2
Can anybody give me the reason why this strange behavior comes?
You can't store actual decimal representation of fractions.
This is because computer use binary to save any value, including fractional values.
Therefore, there is some difference between actually saved one and what you want to store.

Java: Why is this double variable coming out 0? [duplicate]

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;

Double always returns 0 when dividing ints [duplicate]

This question already has answers here:
Int division: Why is the result of 1/3 == 0?
(19 answers)
Dividing by 100 returns 0
(6 answers)
Closed 9 years ago.
Would someone mind explaining why this doesn't work? All variables except for chance are ints, whereas chance is a double. When I print all the values they are definitely correct... but chance always comes out as 0.0. I know this has something to do with converting ints to doubles, as I have had an issue like this a couple of times before. What is the key to getting it to do what you want?
gladValue = (glad.dexterity+glad.tactical+weaponSkill);
oppValue = (glad.target.dexterity+glad.target.tactical+glad.target.agility);
chance = (gladValue/oppValue)*10.0;
Thanks
You should write gladValue * 10.0 / oppValue instead.
The reason is quite subtle. Your brackets mean that gladValue / oppValue is computed first. But these variables are integers so the result is an integer and therefore you lose the fraction part. Only when it is multipled by 10.0 will it get promoted to a double; but by then it's too late.
If you do as I say then, bearing mind that * and / have the same precedence and the operations happen from left to right, then when computing gladValue * 10.0, gladValue is promoted to floating point and that floating point result is divided by oppValue.

Java does not print decimal places [duplicate]

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.

2 / 4 = 0.0 in java? [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Why does the division of two integers return 0.0 in Java?
I have some very confusing problem..
I want to calculate some stuff and after some debugging I saw that java calculates this arithmetic: 2 / 4 = 0.0 But it should be 0.5
2 & 4 are stored in integer variables
the result is stored in a double-type.
Did I miss something clearly?
It is because of integer division (Integer division rounds toward 0). Cast one of the operand to double type.
Example:
double temp = (double)2/4
will give you correct results.
Use
myDouble = (double) integerWhoseValueIs2 / integerWhoseValueIs4
The fact you store it in a double doesn't change the fact that the division of two integers makes an integer. When you store it, it's too late.
From the Java Language Specification :
Integer division rounds toward 0. That is, the quotient produced for
operands n and d that are integers after binary numeric promotion
(§5.6.2) is an integer value q whose magnitude is as large as possible
while satisfying |d · q| ≤ |n|.
If you do not write a cast to double, the result is always an int.
double a = (double) 2/4;

Categories