1

我在 Windows 8 (Intel Atom Z3775) 上使用以下方法:

public static strictfp void main(String args[])
{
    float a = 0.000000002f;
    float b = 90000300000000004f;
    float c = a * b;
    System.out.println(c);
}

这给了我:1.80000592E8

跑步时

public strictfp void calculate()
{
    float a = 0.000000002f;
    float b = 90000300000000004f;
    float c = a * b;
    Toast.makeText(getApplicationContext(), c + "", Toast.LENGTH_LONG).show();
}

我得到:1.8000059E8

为什么它们不同?我使用 strictfp 错了吗?

4

2 回答 2

1

您已经确认打印浮点数的十六进制表示显示值是相同的:

String.format("%08x", Float.floatToIntBits(c))

这意味着 afloat转换为 a的实现方式有所不同String

请注意,OpenJDK 的实现java.lang.Float.toString(float)调用了一个方法,sun.misc.FloatingDecimal即它是一个特定于 JDK 的实现。

你需要:

  • 确保您始终使用相同的实现运行代码
  • 提供您自己的实现,始终产生相同的结果
  • 指定更短的格式,以便字符串与小数位数相同。
于 2016-04-14T12:40:03.883 回答
0

嗯,显示方式肯定不一样……

于 2016-04-14T12:24:23.330 回答