比较 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);
}
}
}
如果我正确理解你的问题,这里有一个非常快速的粗略解决方案 - 我想你需要扩展它以满足你的需要,但这个想法仍然存在。
- 如果仍然不是,请将您的版本转换为字符串。
- 按点拆分,最后分为两部分 - 例如第一部分 (4) 和第二部分 (10)。
- 比较第一部分(因为它是一个字符串,你需要将它解析为一个整数)。如果第一部分相同,则比较第二部分(您也需要解析它)。
如果您使用的是 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
然后按照上述字符串的说明进行操作。
我有一个比较 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);
}
}
}
如果我正确理解你的问题,这里有一个非常快速的粗略解决方案 - 我想你需要扩展它以满足你的需要,但这个想法仍然存在。
- 如果仍然不是,请将您的版本转换为字符串。
- 按点拆分,最后分为两部分 - 例如第一部分 (4) 和第二部分 (10)。
- 比较第一部分(因为它是一个字符串,你需要将它解析为一个整数)。如果第一部分相同,则比较第二部分(您也需要解析它)。
如果您使用的是 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
然后按照上述字符串的说明进行操作。