比较 Java 中的版本

Comparing of version in Java

我有一个比较 Eclipse 版本的功能。 我们对当前 Eclipse IDE 进行子字符串化(例如,如果当前版本是 4.7.10,则该函数将 return 4.7)

我的问题是当前版本是 4.10。 Java 在比较 BigDecimal 时所做的是删除尾随零。

我如何知道 4.10 会大于 4.5?

谢谢!

这里有一些东西可以让你继续 - 非常简单:

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 并且想要转换为字符串并保留尾随零,请尝试以下操作:

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

然后按照上述字符串的说明进行操作。