Правильный способ использования> и <сравнение на плавает в Java? - PullRequest
0 голосов
/ 12 апреля 2019

Мне хорошо известно, что использование оператора == в двух числах с плавающей запятой не работает / является плохой практикой, однако, как я вижу, использование операторов > и < в двух числах должно быть допустимым.Однако в моей программе, когда я сравниваю очень маленькое значение с плавающей точкой с нулем, кажется, что оно просто округляет маленькое значение до нуля, несмотря на то, что оно правильно печатает небольшое число в окне консоли.Вот упрощенный базовый пример кода, чтобы показать, что я имею в виду:

float f1 = 0;
float f2 = 5.063425E-12; //or something similarly small
//f2 isn't actually assigned like this, this is a typical value
//as it would be displayed in the console window. it is actually
//formed by a series of multiplications which I haven't shown
//here for simplicity.
if(f2 > f1) {
   System.out.println("Success!");
} else {
   System.out.println("Failed");
}

в настоящее время он будет выводить «Failed», даже если f2 умеренно больше нуля.показатель степени f1 может быть меньше, поскольку он не инициализируется дробной частью, может ли это повлиять на сравнение?Какое решение / лучшая практика для этого?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Глупый я, основная ошибка, случайно оставил несколько комментариев в ...

0 голосов
/ 12 апреля 2019

Когда вы умножаете число с плавающей запятой на число меньше 1, но больше 0, оно в конечном итоге будет равно 0. Возможно, некоторые из ваших рядов умножения достигают этой точки, а другие - нет.

...