当前位置: 首页 > 面试题库 >

原始双值是否等于幅度?

堵浩波
2023-03-14
问题内容

我必须检查两个双精度值是否相等,包括大小和精度。我遇到了一个奇怪的情况,即原始的double equals校验不一致,并且取决于值的大小。

我使用过的Java版本:

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)

我的代码:

public class Test{
     public static void main(String args[]) throws Exception{
         String val1 = "15.999999999999999";
         String val2 = "16";
         String val3 = "16.999999999999999";
         String val4 = "17";
         double d1 = Double.parseDouble(val1);
         double d2 = Double.parseDouble(val2);
         double d3 = Double.parseDouble(val3);
         double d4 = Double.parseDouble(val4);
         System.out.println(val1 + "=" + val2 + "? ===>" + (d1==d2));
         System.out.println(val3 + "=" + val4 + "? ===>" + (d3==d4));
     }
}

输出:

15.999999999999999=16? ===>false
16.999999999999999=17? ===>true

问题答案:

由于各种无聊而复杂的原因,您尝试执行的操作无法正常工作,您可以在这里阅读:http
:
//download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html

除非您要比较双精度的位表示(可能比较有洞见,也可能没有洞察力),否则您将始终需要某种epsilon值,即处理数字浮点表示时的误差幅度。就像是:

boolean doublesAreEqual(double d1, double d2)
{
    double d = d1 / d2;
    return (Math.abs(d - 1.0) < 0.00001 /* epsilon */);
}


 类似资料:
  • 返回一个布尔值,确定专递的值是否为原始值。 在不是原始类型的字符串数组上使用 Array.includes() , 使用 typeof 提供类型。 由于 typeof null 被求值为 'object',所以需要直接比较。 const isPrimitive = val => !['object', 'function'].includes(typeof val) || val === null

  • 问题是: 我们将“根到叶路径”定义为树中的任意节点序列,从根节点开始向下延伸到叶。该路径的“根到叶路径和”是沿该路径的所有节点(包括根)的和。定义一个空树,使其不包含根到叶的路径(因此其和为零)。定义一个具有一个节点的树,使其根到叶的路径仅由根组成(因此其总和是根的值)。给定一个二叉树和一个值“sum”,如果该树有一些根到叶的路径,使得沿路径的所有值相加等于“sum”,则返回true。如果找不到这

  • 问题内容: 比较两个浮点值以实现完全相等的一种优雅,易读且不冗长的方法是什么? 听起来很简单,但这是一个严重的问题。该运营商没有得到楠所做的工作,也有特殊待遇的零: 但我想,以确定是否两个值是完全一样的(但我 不 关心不同的NaN模式,所以任何的NaN ==任何其他男- >真)。 我 可以 使用这段丑陋的Monster代码 来 做到这一点: 有没有更好的方法来编写此代码(并使意图显而易见)? 问题

  • 问题内容: 显然,这比我想象的要难找到。而且甚至很简单… 是否有与Javascript中内置的PHP htmlspecialchars等效的功能?我知道自己很容易实现,但是使用内置函数(如果可用)会更好。 对于不熟悉PHP的人,htmlspecialchars可将类似的内容转换为 我知道这一点,因此不能这样工作。 问题答案: 解决方案代码存在问题-它只会转义每个特殊字符的第一次出现。例如: 这是正

  • 问题内容: 我正在配置Java客户端,它的工作是建立与服务器的TLS连接。我想使用以下3种密码配置客户端: 在Java支持的密码套件中,我找到了相同的密码,但是开头是SSL,而不是TLS。问题是,如果我用以下方法配置了客户端: 这两个列表是否完全相同,并且服务器将对其进行解释?我担心是否为客户端配置了密码,这意味着与某些不同,并且可能某些服务器不支持。我如何确定? 问题答案: 是的,它们是相同的。

  • 问题内容: 如果我在代码中使用如下语句 它将数组初始化为特定的东西吗?(例如0)我似乎记得此文件记录在某处,但我不确定要搜索什么。 问题答案: JLS说,在15.10数组创建表达式中 […]创建具有指定长度的一维数组,并将数组的每个组件初始化为其默认值 在4.12.5变量的初始值处表示: 对于type ,默认值为零,即。