Java的浮点除法是否严重损坏?

问题描述

我一直在尝试用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));

Outputs: 13410,48

这是怎么回事?我必须使用文字'1000000f'而不是10 ^ 6才能使其正常工作。另外,我认为使用(float)转换除法元素之一会将所有内容都设置为float,而我不会结束整数运算。

解决方法

10^6不是一百万。现在是12,因为^是按位xor运算符,而不是幂运算。

使用1e6f或仅使用1000000f

,

尝试改用它:

int CLOCK = 1789773;
float fclock = (float) (CLOCK/(Math.pow(10,6)));
System.out.printf("\n%.2f",fclock);
,
float CLOCK=1789773f;
System.out.printf("\n%.2f",CLOCK/Math.pow(10,6));

OR

int CLOCK=1789773;
System.out.printf("\n%.2f",(float) (CLOCK/Math.pow(10,6)));

尝试使用 Math.pow(10,6) ,对我来说很好。