Nie wiem co dokładnie liczysz i jakie jest twoje zadanie.
Ponieważ jednak ani 2.5
, ani 2.7
nie da się dokładnie przedstawić w postaci double. Tak jak 1/3 nie da się przedstawić dokładnie w postaci ułamka dziesiętnego, tak 0.1 (1/10), 0.2 itd nie da się przedstawić dokładnie w postaci ułamka dwójkowego. Zobacz i poćwicz z sobie output binary
: https://www.exploringbinary.com/floating-point- niconverter/
Więc 2.5 - 2.7
zrobione na double nie będzie równe 0.2 (będzie dość bliskie).
a) Jeśli potrzebujesz operować na liczbach dziesiętnych to wtedy zamiast double musisz użyć BigDecimal ( i będzie duzo wiecej w javie pisania :-().
b) Alternatywą jest dodanie do X_FIRST pewnego małego epsilona np. 0.00001 i wtedy będzie to pewnie w twoim przypadku ok. Ten epsilon załatwi błedy zaokrlągleń. (X_FIRST=2.500001
).
jeśli operujesz na pieniadzach, które ustawowo muszą być liczone dziesiętnie wtedy zawsze a.
jeśli to jakaś grafika, symulacje fizyczne itp. gdzie nie ma znaczenia dokładność - to wtedy b