How do math equations work in Java?

33,813

Solution 1

In your second example, although you are assigning the result to a variable of type float, the calculation itself is still performed exactly the same way as the first example. Java does not look at the destination variable type to determine how to calculate the right hand side. In particular, the subexpression 3 * (4 - 1) / 2 results in 4.

To fix this, you can use floating point literals instead of all integers:

float test = 5 + 3 * (4 - 1) / 2.0f;

Using 2.0f triggers floating point calculations for the arithmetic expression.

Solution 2

Although you represent the result of 5 + 3 * (4 - 1) / 2 in a float, the actual evaluation is done with the precision of an integer, meaning that the division of 9 / 2 returns 4 rather than the 4.5 you would receive if they were evaluated as floats.

Solution 3

Expressions have their own type. So start with:

5 + 3 * (4 - 1) / 2

Each value has its own type. This type happens to be int, so this is the same as:

((int)5) + ((int)3) * (((int)4) - ((int)1)) / ((int)2)

Making it clearer that we're dealing with ints. Only after this is evaluated as 9 does it get assigned to a float.

Share:
33,813
glcohen
Author by

glcohen

UC San Diego Computer Science B.S. Student

Updated on August 10, 2022

Comments

  • glcohen
    glcohen over 1 year

    When I do something like this

    int test = 5 + 3 * (4 - 1) / 2;
    

    I get 9. I suspected this was because int rounds down. However, when I do this

    float test = 5 + 3 * (4 - 1) / 2;
    

    I also get 9. However, when I do this

    float test1 = 5;
    float test2 = 4.5;
    float test = test1 + test2;
    

    Test finally outputs 9.5. Could someone explain the logic behind this? Why don't I get 9.5 in the second example? Thanks.