我正在寻找方法String doubleToString(double d)
,满足以下条件:
对于任意一对 double
d1
和d2
如果Double.compare(d1, d2) < 0
然后doubleToString(d1).compareTo(doubleToString(d2)) < 0
.
为了说明需求,我为 int
编写了类似的方法类型:
public static String intToString(int i) {
String string = Integer.toHexString(i - Integer.MIN_VALUE);
return "00000000".substring(string.length()) + string;
}
结果(每一个 String
都大于前一个):
intToString(-2147483648) = intToString(0x80000000) = "00000000"
intToString(-10) = intToString(0xfffffff6) = "7ffffff6"
intToString(-1) = intToString(0xffffffff) = "7fffffff"
intToString(0) = intToString(0x0) = "80000000"
intToString(1) = intToString(0x1) = "80000001"
intToString(10) = intToString(0xa) = "8000000a"
intToString(2147483647) = intToString(0x7fffffff) = "ffffffff"
我想要的是 double
具有相同的行为方法的。
最佳答案
您可以将 double 转换为长整型数,然后使用与处理整数类似的方法。我假设以下方法可以按您的意愿工作(NaN 被视为最大数字):
public static String doubleToString(double d) {
final long bits = Double.doubleToLongBits(d);
final String s = Long.toString(bits);
return (bits < 0 ? "--------------------" : "00000000000000000000").substring(s.length()) + s;
}
输入和输出示例:
[-Infinity, -1.7976931348623157E308, -4.9E-324, -0.0, 0.0, 4.9E-324, 1.7976931348623157E308, Infinity]
----4503599627370496
----4503599627370497
-9223372036854775807
-9223372036854775808
00000000000000000000
00000000000000000001
09218868437227405311
09218868437227405312
关于java - 将 Java double 映射到 String 并保留排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055173/