将Java double映射到保留字符串的排序顺序
我正在寻找一个方法将Java double映射到保留字符串的排序顺序,java,double,Java,Double,我正在寻找一个方法字符串doubleToString(double d),它满足以下条件: 对于任何一对doubled1和d2如果double。比较(d1,d2)
字符串doubleToString(double d)
,它满足以下条件:
对于任何一对double
d1
和d2
如果double。比较(d1,d2)<0
,然后doubleToString(d1)。比较(doubleToString(d2))<0
为了说明这种需要,我为int
type编写了一个类似的方法:
public static String intToString(int i) {
String string = Integer.toHexString(i - Integer.MIN_VALUE);
return "00000000".substring(string.length()) + string;
}
结果(每下一个字符串
大于上一个):
我想要的是对double使用相同的行为方法。将数值与其字符串表示形式进行比较从来都不是一个好主意 然而,要回答您的问题,请使用双重字符串(d1) 是: 字符串s=字符串。值(d1); 或者简单地说:
字符串s=”“+d1 您可以将double转换为long,然后使用与int类似的方法。我假设以下方法可以按照您的意愿工作(NaN被视为最大数):
您的思路是正确的,但需要为整数部分提供多达16个前导零。小数部分可以任意长,因此不能按照
int
代码使用string.length()
最好将Double集合保留为Double,或
Double
,并且仅转换为字符串用于显示或报告目的。您不能@覆盖字符串的。compareTo
以满足您的要求吗?您能提供一个示例输入和预期输出吗?它必须可读吗?@biziclop I不必可读,但也不错。@BillF否,我不能重写CompareTo这不满足字符串输出的比较结果与原始双精度的比较结果相同的要求。(或者更简洁地说:转换并没有保持秩序。)对不起,现在我明白了。(尽管如此:我会将double作为double进行比较)实际上,我需要它作为纯文本数据库,以便为orderby
查询获得正确的结果。这太聪明了!
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"
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