【问题标题】:String cannot be converted to double error in a function字符串不能在函数中转换为双重错误
【发布时间】:2024-01-11 20:54:01
【问题描述】:

当 x 为 NaN 时,我试图以字符串格式输出 NaN。但是,当我在 Double.isNaN 为真时尝试返回“NaN”字符串时,控制台会抛出 String cannot be converted to double 错误。我尝试使用 Double.parseDouble() 将字符串 r 解析为双精度,但无济于事。

这是我的代码:

public static double heaviside(double x) {
    String r = "NaN";
    r = Double.parseDouble(r);
    double result;
    if (Double.isNaN(x)) return r;
    else if (x < 0.0) return result = 0.0;
    else if (x == 0.0) return result = 0.5;
    else return result = 1.0;
}

控制台输出

ActivationFunction.java:6:错误:不兼容的类型:双精度不能转换为字符串 r = Double.parseDouble(r); ^ ActivationFunction.java:8:错误:不兼容的类型:字符串不能转换为双精度 if (Double.isNaN(x)) 返回 r; ^

【问题讨论】:

  • 如果x 是NaN,你为什么不直接返回x
  • 我建议你使用像 IntelliJ 或 Eclipse 这样的 IDE。它们在学习一门新语言时非常有用。

标签: java double


【解决方案1】:

您的问题来自这样一个事实,即您尝试将 double 分配给 String 变量。 r 定义为String and Double.parseDouble(r) 返回double。如果您将其分配给result,它将起作用,如下所示:double result = Double.parseDouble(r);

但是,首先不需要从String 解析新的double。你想在x == NaN 时返回NaN。在这种情况下,您可以只返回x,因为xNaN。不需要另一个变量,解析和所有这些。

【讨论】:

    【解决方案2】:

    您正在尝试将 String 转换为 double 并将其值存储在 r 中,这是一种 String

    您应该创建另一个 double 类型的变量,并可以像这样将该值存储在其中:

    public static double heaviside(double x) {
        String r = "NaN";
        double d = Double.parseDouble(r);
        double result;
        if (Double.isNaN(x)) return d;
        else if (x < 0.0) return result = 0.0;
        else if (x == 0.0) return result = 0.5;
        else return result = 1.0;
    }
    

    希望对你有所帮助。 编码快乐..!

    【讨论】:

    • 问题是,这一切的意义何在? “如果 x 是 NaN,则创建一个表示 NaN 的新双精度并返回该新值”。为什么不首先返回x
    • 你是对的。我给出了这么多解释,因为@palerabbit 可以理解他试图将 double 存储到 String 中,这是他提到的一个实际错误。
    • 感谢您的意见。我试图在我的输出中得到“NaN”而不是无穷大,但是是的,你在这里所拥有的东西很有意义!欢呼@Amongalen
    【解决方案3】:

    "NaN" 不是双精度数,您不能将其转换为双精度数且不返回 x,因为 Java 在代码的第 2 行返回异常并且不会继续运行其余代码

    【讨论】:

    • 很有趣,我刚刚尝试过double test = Double.parseDouble("NaN"); 并且......它运行得很好。
    • 该行中的错误不是“NaN”不是双精度数。但是 parseDouble 返回一个双精度而不是一个字符串,所以你不能将它分配给一个字符串。
    • 我同意你的看法@Amongalen,我也运行它,它工作正常,不知道为什么。但我想,我尝试在 1System.out.println(Double.parseDouble("NaN))` 中打印,它再次将 double 转换为 String。
    • 编译错误不是异常,既不返回编译错误也不返回异常。不要滥用标准术语。
    最近更新 更多