В этом конкретном примере вам может быть лучше изменить выражение на 3 * 2 / 3
или 3 / 3 * 2
.Таким образом, вы получите точный результат, используя только целочисленную математику.
Использование математики с плавающей точкой является более общим решением, но вы должны знать о проблемах округления.В общем, вы не должны ожидать, что x * (y / x)
даст вам ровно y
, когда x
и y
являются числами с плавающей точкой.
Если вы знаете, что результат является целым числомпросто хотите округлить его до ближайшего целого числа, вы можете использовать Math.round()
:
Math.round(3 * (2f / 3))
Просто приведение результат на int
не является хорошимИдея, поскольку числа с плавающей точкой неточны, и такое приведение будет просто усекать число.