java - 测试先前声明的变量总和是否不等于 3.14 的 boolean 表达式

标签 java boolean

我正在通过以前的试卷努力积累我的 Java 经验。 这个特定问题有两个答案。第一个是我自己的,看起来很简单,第二个是我的讲师的,在我 Java 开发的这个特定阶段,这似乎让我感到困惑。

这是我的代码:

public class InClassTestTwoQ2
{
public static void main(String[] args){
    double sum = 3.14;

    System.out.println(test(sum));
    System.out.println(testTwo(sum));
}

public static boolean test(double sum){
    return sum != 3.14; //My boolean test return type
    }
public static boolean testTwo(double sum){
    return Math.abs(sum - 3.14) > 1e-14; //Lecturer boolean test return type
    }
}

在这里使用 Math.abs 是更好的选择吗?另外,我不确定 1e-14 在做什么? 有人可以解释为什么我的讲师以这种方式返回他的 boolean 语句的任何可能性吗?我的似乎很直接,因为我永远不会按照他的方式去做?

此外,请原谅我的代码中的任何错误。我还在学习Java。 非常感谢。

最佳答案

为了让您大致了解为什么讲师的答案更好,而您的答案却不像您想象的那么简单,请考虑以下因素:

3.1444440 和 3.1444441

它们相等吗?那么在 Java 中,如果您简单地通过 == 比较它们,那么您将得到 false。这就是为什么你不应该将 double /浮点类型与 == 进行比较。比较 float 类型的最佳方法是使用 tolerance value。您想要测试减去两个 float 类型的结果是否在该公差值之内。例如,您的老师使用的公差值是 1e-14。因此,如果 sum-3.14 在容差值内,则认为这两个数字相等。

另请注意,Math.abs 为您提供减法的绝对 值,因此您永远不会得到负数,否则您不会得到正确的结果。

希望这能给您一个概览。

关于java - 测试先前声明的变量总和是否不等于 3.14 的 boolean 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15460764/

相关文章:

objective-c - 从 plist 文件恢复 NSDictionary 中的 BOOL

java - 我需要在java中的不同源中广播Http请求

Java写入关闭的输出流不抛出ioexception

java maven exec-maven-plugin 没有在 mvn clean install 上执行

java - 对照另一个数组列表检查数组列表

C# 安装程序变量

java - 如何使用正则表达式删除字符串中不需要的空格和最后一个单词?

Java8 lambda 顺序或管道字符串转换

python - 如何在 df 中保留 dtype ('o' ) 而不是 bool

c++ - 将 `nullptr` 分配给 `bool` 类型。哪个编译器是正确的?