排序双打数组

时间:2014-03-27 08:10:49

标签: java arrays sorting double

我有双打数组,我正在使用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”,如何对这个数组进行排序?

3 个答案:

答案 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^x10提升到x的力量),其后面的数字为x。所以在上面,1.234 * 10^210^2100,因此1.234 * 1001.234

请查看您的某个号码9.914204103773398E-4,即9.914204103773398 * 10^-410^-40.0001,因此9.914204103773398 * 0.00010.0009914103773398