【问题标题】:Java Calculation differsJava 计算不同
【发布时间】:2018-07-14 12:57:03
【问题描述】:

我在 JavaEE 中有一个简单的数学计算类,结果与在线 Java 计算器不同。例如,网站JavaCalc 给了我正确的结果,即 0.0009。但是,对我来说,在我的 java 程序中,结果变成了 9.xxx。

上述网址使用的数学公式:

(0.5) * ((0.85724038)-(0.779))/((40.32173718)-(0.779))

Java 方程:

Total_Score = (0.5) * ((T) - (N)) / ((ME) - (N));

在哪里: T = 0.85724038

N = 0.779

M = 40.32173718

我很困惑为什么当两个方程相同时答案不同。

【问题讨论】:

    标签: java math servlets jakarta-ee calculation


    【解决方案1】:

    计算结果相同,但显示不同。我的输出是
    9.893141646194965E-4
    这意味着 0.0009xxxx。 “E”代表科学记数法,E-4 表示将小数点左移四位(因此变为 0.0009xxxxxxxxxx)。也可以写成 9.893141646194965 * 10^-4。它们是相同的值,但我猜System.out.println() 会将数字转换为科学记数法,如果这样更容易阅读的话。 Java 将这些值解释为相同。

    【讨论】:

    • @Nix 他们是一样的。这只是视觉上的差异。
    • @Carcigenicate 正确,但要求仅以数字而非科学计数法显示。所以我想以 0.00 格式而不是 E-4 显示结果
    • @Nix 然后这样做:System.out.printf("%f\n", value); 并用你的等式替换值。
    • @PieterMantel 语法Double.parseDouble(String.format("%f", value)); 给出9.89E-4
    • @Nix 等等,你不能再次解析它,这违背了首先格式化它的目的。你不能有你正在寻找的格式的实际双精度。 format 打印之前,但在此之前将其保留为双精度。是一样的。
    【解决方案2】:

    如果要实际显示非科学计数形式的数字,可以使用format

    String.format("%.Xf", yourNumHere);
    

    其中X 是要显示的小数位数。如果您希望它显示到小数点后 9 位,格式字符串将是 "%.9f"

    【讨论】:

    • 语法Double.parseDouble(String.format("%.9f", value)); 给出9.89314E-4
    • @Nix 这可能意味着您在将其提供给format 之前已经将其转换为字符串。我刚刚对其进行了测试,它工作正常(在 Clojure 中,当然,但它应该是相同的)。
    • 实际上给它一个字符串会导致错误。我不知道你做了什么。 (String/format "%.9f" (to-array [(* 0.000125 0.00069)])) 产生 "0.000000086"
    猜你喜欢
    • 2023-02-26
    • 1970-01-01
    • 2021-03-05
    • 2015-12-03
    • 1970-01-01
    • 2020-01-03
    • 2017-09-14
    • 1970-01-01
    相关资源
    最近更新 更多