Java中两个double值的简单比较会产生一些问题。让我们考虑以下Java中的简单代码段。
package doublecomparision;
final public class DoubleComparision
{
public static void main(String[] args)
{
double a = 1.000001;
double b = 0.000001;
System.out.println("\n"+((a-b)==1.0));
}
}
上面的代码似乎返回true
,表达式的求值,((a-b)==1.0)
但是没有。它false
之所以返回,是因为该表达式的求值0.9999999999999999
实际上是预期的1.0,1.0
因此不等于,因此条件的求值为boolean false
。解决这种情况的最佳建议方法是什么?
基本上,你不应该进行精确比较,而应该执行以下操作:
double a = 1.000001;
double b = 0.000001;
double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {...}
这是一个Java代码,应该测试小数点后的前三位是否相同。而我需要编写这个程序没有一个主方法。
在一个JUnit4测试中,我有一个方法,它返回一个对象,我要将它与引用列表进行比较。到目前为止,我发现的最佳解决方案是使用和,如下所示: 对于只返回很少值的测试来说,这是很好的。但是如果一个测试返回更多的值,这肯定不是最好的方法。 我还尝试了下面的代码。要编译代码,需要在之前向下转换到: 对比失败了,不明白为什么: java.lang.AssertionError:预期:(包含<[<0.2>的<1
问题内容: 这是一个简单的问题-给定两个URL,是否有一些内置方法或一个Apache库来确定它们在逻辑上是否相等? 例如,这两个URL相等: 问题答案: 尽管(以及有问题的)这些特定示例 未 返回,但我认为这是唯一可以假定等效的情况(因为HTTP协议中没有空路径)。 这些URI 并且可以 不 被认为是等价的。 也许您可以使用包装在实用程序中的方法来显式处理此特定情况。
问题内容: 我有两个Arraylist 其包含以下值是 AllProcessList arraylist包含所有Java进程,RunningProcessList arraylist包含当前正在运行的进程。我想比较这两个arraylist并显示是否未运行该进程。例如,比较两个列表并要显示以下进程未运行。 我使用了以下代码,但无法正常工作。 问题答案: 查看List的文档,尤其是removeAll(
问题内容: 我正在尝试比较两个日期,而我只想比较日期部分而不是时间部分,这就是我在程序中存储日期的方式: 我有一个: 我想用 但是由于还涉及时间部分,所以我无法获得正确的答案。我该如何解决我的问题? 我不想使用JODA-TIME 问题答案: 您可以像这样逐个比较价值 要么 如果您使用Date类,请考虑改用Calendar类这是最优雅的解决方案,为此使用Calendar和Comparator 用法:
问题内容: 比较Java 8中的两个实例并找出它们是否具有相同元素(特别是出于单元测试目的)的一种好方法是什么? 我现在得到的是: 或者: 但这意味着我要构建两个集合并丢弃它们。考虑到测试流的大小,这不是性能问题,但是我想知道是否存在一种规范的方式来比较两个流。 问题答案: