我在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错了吗?
答案 0 :(得分:1)
您已确认打印浮动的十六进制表示显示值相同:
String.format("%08x", Float.floatToIntBits(c))
这意味着将float
转换为String
的方式的实现存在差异。
请注意OpenJDK implementation of java.lang.Float.toString(float)
从sun.misc.FloatingDecimal
调用一个方法 - 即它是一个特定于JDK的实现。
你需要:
答案 1 :(得分:0)
嗯,显示方法肯定不同......