我正在寻找满足以下条件的方法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
提供相同的行为方法。
答案 0 :(得分:3)
您可以将双打转换为long,然后使用类似已经用于整数的方法。我假设以下方法可以正常工作(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
答案 1 :(得分:0)
您已经走上正轨,但您需要为整体部分提供最多16个前导零。小数部分可以任意长,因此您不能根据string.length()
代码使用int
。
最好将双打集合保持为双精度或Doubles
,并且仅转换为字符串以用于显示或报告目的。
答案 2 :(得分:-1)
将数字与其字符串表示进行比较绝不是一个好主意。
然而 - 回答你的问题 - doubleToString(d1) 是: String s = String.valueOf(d1); 或者干脆: String s =&#34;&#34; + d1;