Java中浮点除法中的严重数字损坏? [复制]
Posted
技术标签:
【中文标题】Java中浮点除法中的严重数字损坏? [复制]【英文标题】:Heavy number corruption in floating point division in Java? [duplicate] 【发布时间】:2020-12-11 04:52:54 【问题描述】:我一直在尝试用 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) 转换除法元素之一会将所有内容设置为浮点数,并且我不会结束整数数学运算。
【问题讨论】:
供参考:^
是位异或运算符,属于bitwise operators。
【参考方案1】:
10^6
不是一百万。它是 12,因为^
是按位异或运算符而不是求幂。
使用1e6f
,或只使用1000000f
。
【讨论】:
【参考方案2】:尝试改用这个:
int CLOCK = 1789773;
float fclock = (float) (CLOCK/(Math.pow(10,6)));
System.out.printf("\n%.2f", fclock);
【讨论】:
【参考方案3】: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)
,它对我来说很好用。
【讨论】:
以上是关于Java中浮点除法中的严重数字损坏? [复制]的主要内容,如果未能解决你的问题,请参考以下文章