java - 如何在Java中找到小数点的差异
问题描述
假设我们有以下数字:
23.499999959800466
23.49999995949621
23.49999995980162
23.499999956586194
23.499999954013447
23.499999959041133
通过查看它们,可以注意到9th
小数点的差异。我的问题是如何识别 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 个小数位。
推荐阅读
- c++ - 如何获取使用 x86intrin.h 在 MAC 上运行的代码
- azure - 我们如何以编程方式迭代租户中的 Power Apps?
- excel - Excel 按多个条件过滤表值
- java - Android 工作室动画没有按照我的需要进行
- json - 如何使用 TypeScript 将 JSON 作为带有枚举的对象加载?
- ruby-on-rails-5 - TWilio-将传入的 SMS 转发到 Rails5 中的电子邮件
- pyomo - 带变量的两边的乘法不等式
- django - 在 Django 中搜索和检索数据库中的数据
- arrays - 从一组数组中获取 10 个最小的数组
- spring-webflux - Spring Cloud Gateway 中未加载静态内容