我有双打数组,我正在使用Arrays.sort
对它进行排序问题是在输出数组中我是这样的(这是反向后的数组输出):
0.002385171991295645
...
9.914204103773398E-4
...
1.00139601969068E-4
9.975711760353395E-5
等等,我们可以看到最短的数字位于顶部,最长的位于底部。给定范围内的数字,例E-4排序很好。我甚至创建了一个示例代码来测试它:
double l1 = 0.002385171991295645;
double l2 = 9.914204103773398E-4;
if(l1 > l2) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
它给了我“TRUE”,如何对这个数组进行排序?
答案 0 :(得分:3)
你可能最后不知道E-4
的含义是什么。
9.914204103773398E-4
实际上是
9.914204103773398 * 10^-4
小于 <{1}}。
有关详细信息,请访问JLS - 3.10.2. Floating-Point Literals。
答案 1 :(得分:2)
您对科学记数法(也称为standard form)感到困惑。
9.914204103773398E-4
表示9.91... x 10^(-4)
,即0.0009914...
。所以这个值确实小于0.0023..
。
答案 2 :(得分:2)
“e”或“E”表示“指数”,表示scientific notation。
以下是Oracle.com上the primitive data types tutorial的一个有用示例:
double d1 = 123.4;
double d2 = 1.234e2;
这些都是相同的数字。 “e”基本上是指10^x
(10
提升到x
的力量),其后面的数字为x
。所以在上面,1.234 * 10^2
。 10^2
为100
,因此1.234 * 100
为1.234
。
请查看您的某个号码9.914204103773398E-4
,即9.914204103773398 * 10^-4
。 10^-4
为0.0001
,因此9.914204103773398 * 0.0001
为0.0009914103773398
。