java - 给定两个 double ,如何确定它们的商是否准确?

标签 java math floating-point ieee-754

给定两个 double 值,pq,我如何确定它们的商是否:

double result = p / q;

exact pq 二进制值的结果吗?

result是否正好等于pq的数学除法。

很明显,这对于某些值是正确的,例如 1.0/2.0 而对于其他值是错误的,例如 1.0/5.0,所以我正在寻找一个惯用且准确的区分大小写的方法。

看起来浮点模 p % q == 0 可能 可行,但我不确定!

最佳答案

您可以使用 BigDecimal 来查看除法是否准确:

private static boolean canDivideExact(double p, double q) {
  double r = p / q;
  BigDecimal d = new BigDecimal(r);
  return d.multiply(new BigDecimal(q)).compareTo(new BigDecimal(p)) == 0;
}

例如:

System.out.println(canDivideExact(1, 2)); //true
System.out.println(canDivideExact(1, 3)); //false

关于java - 给定两个 double ,如何确定它们的商是否准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44669556/

相关文章:

c - 如何在 C 中显示浮点除法的实际结果?

c++ - 为什么我得到浮点异常

java - Hibernate和Mysql,事务自动提交只是一个部分

java - Win32 STD_INPUT_HANDLE/ReadConsoleInput : How to write to it from Java?

python - 计算数字中的数字之和,使用/和%时结果不正确

java - 如何将数字四舍五入到用户给定的小数位数

java - 为什么当 BigDecimal 应该适合有效数字时,除法会导致舍入?

java - DDD和应用层

java展开数学方程式

c - 编写我自己的 float 解析器