【发布时间】:2016-04-14 12:16:19
【问题描述】:
我在 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 错了?
【问题讨论】:
-
如果在这两种情况下都打印
String.format("%08x", Float.floatToIntBits(c))会发生什么? -
它们返回完全相同的字符串。在两个平台上使用 Float.toString(c) 转换为 String 没有帮助。
-
正确 - 所以实际数字是按位相同的。将浮点数转换为字符串的算法的实现只是有所不同。
标签: java floating-point strictfp