首页 > 解决方案 > 如何在Java中找到小数点的差异

问题描述

假设我们有以下数字:

23.499999959800466
23.49999995949621
23.49999995980162
23.499999956586194
23.499999954013447
23.499999959041133

通过查看它们,可以注意到9th小数点的差异。我的问题是如何识别 Java 中的这种差异?

标签: java

解决方案


如果您知道两个数字具有相同的整数部分,请使用以 10 为底的对数:

double n1 = 23.499999959800466d;
double n2 = 23.49999995949621d;

// index of the last identical decimal place between n1 and n2
int decimalDiff = (int) Math.abs(Math.log10(n1 - n2));

System.out.println(decimalDiff);

输出:9

如果您有很多数字并且您知道它们都具有相同的整数部分,则计算列表中最小和最大之间的小数差:

List<Double> numbers = Arrays.asList(
                23.499999959800466, 
                23.49999995949621, 
                23.49999995980162,
                23.499999956586194, 
                23.499999954013447, 
                23.499999959041133);

        double smallest = Collections.min(numbers);
        double largest = Collections.max(numbers);

        System.out.println((int) -Math.log10(largest - smallest));

输出:8。这些数字都有 8 个小数位。


推荐阅读