Java中浮点除法的严重数字损坏?
我一直在尝试用java浮点除法做一些简单的事情,读了几篇关于值的一些最小变化的文章,但与下面的内容完全不同 这是预期的结果:Java中浮点除法的严重数字损坏?,java,floating-point,division,Java,Floating Point,Division,我一直在尝试用java浮点除法做一些简单的事情,读了几篇关于值的一些最小变化的文章,但与下面的内容完全不同 这是预期的结果: float f = 1789773f / 1000000f; System.out.printf("\n%.2f", f); Outputs: 1,79 这就是我处理变量时发生的情况: int CLOCK=1789773; System.out.printf("\n%.2f", (float)CLOCK/(10^6)); Ou
float f = 1789773f / 1000000f;
System.out.printf("\n%.2f", f);
Outputs: 1,79
这就是我处理变量时发生的情况:
int CLOCK=1789773;
System.out.printf("\n%.2f", (float)CLOCK/(10^6));
Outputs: 13410,48
发生了什么事?我不得不使用文字“1000000f”而不是10^6来让它工作。另外,我认为用(float)强制转换一个除法元素会将所有内容设置为float,并且我不会结束整数运算。尝试使用以下方法:
int CLOCK = 1789773;
float fclock = (float) (CLOCK/(Math.pow(10,6)));
System.out.printf("\n%.2f", fclock);
或
int CLOCK=1789773;
System.out.printf("\n%.2f",(float) (CLOCK/Math.pow(10,6)));
试着用数学。pow(10,6),对我来说很好。
10^6
不是一百万。它是12,因为^
是按位异或运算符,而不是幂运算
使用
1e6f
,或仅使用1000000f
作为参考:^
是按位异或运算器,属于。
int CLOCK=1789773;
System.out.printf("\n%.2f",(float) (CLOCK/Math.pow(10,6)));