Сравнение версии в Java - PullRequest
0 голосов
/ 19 марта 2019

У меня есть функция, которая сравнивает версии Eclipse.Подставляем текущую Eclipse IDE (например, если текущая версия 4.7.10, функция вернет 4.7)

Моя проблема в том, что текущая версия сейчас 4.10.Что делает Java при сравнении BigDecimal: удаляет конечные нули.

Как мне получить, что 4.10 будет больше 4,5?

Спасибо!

1 Ответ

1 голос
/ 19 марта 2019

Вот кое-что, что поможет вам - очень упрощенно:

public class Main {
    public static void main(String[] args)
    {

        String version1 = "4.10";
        String version2 = "4.5";

        compareVersions(version1, version2);
    }

    private static void compareVersions(String v1, String v2) {
        String[] versionSplit1 = v1.split("\\.");
        String[] versionSplit2 = v2.split("\\.");
        if (versionSplit1[0].equals(versionSplit2[0])) {
            if (Integer.parseInt(versionSplit1[1]) > (Integer.parseInt(versionSplit2[1]))) {
                System.out.println(v1 + " is bigger than " + v2);
            } else if (Integer.parseInt(versionSplit1[1]) == (Integer.parseInt(versionSplit2[1]))){
                System.out.println(v1 + " is equal to " + v2);
            } else {
                System.out.println(v2 +  " is bigger than " + v1);
            }
        } else if (Integer.parseInt(versionSplit1[0]) > Integer.parseInt(versionSplit2[0])) {
            System.out.println(v1 + " is bigger than " + v2);
        } else {
            System.out.println(v2 + " is bigger than " + v1);
        }
    }
}

Вот очень быстрое грубое решение, если я правильно понимаю вашу проблему - я полагаю, вам нужно расширить это, чтобы удовлетворить ваши потребности, ноидея остается.

  1. Преобразуйте вашу версию в строку, если она все еще не существует.
  2. Разделив точку, вы получите две части - например, первую часть (4) и вторую часть (10).
  3. Сравните первую часть (поскольку это строка, вам нужно будет проанализировать ее как целое число).Если первая часть та же самая, сравните вторую часть (вам также потребуется ее проанализировать).

Если вы используете BigDecimal и хотите конвертировать в String и оставить конечные нули,попробуйте это:

double value = 4.10;
//convert double to BigDecimal
BigDecimal bigDecimalValue = BigDecimal.valueOf(value);
BigDecimal tempValue = bigDecimalValue.setScale(2, RoundingMode.CEILING);
//convert to String
System.out.println(tempValue.toPlainString()); //5.40

Затем выполните действия, описанные выше для строк.

...