英文:
Heavy number corruption in floating point division in Java?
问题
我一直在尝试使用Java浮点数除法来做一些简单的事情,已经阅读了几篇关于在值上进行一些最小更改的文章,但与我下面遇到的情况完全不同。
这是期望的代码:
float f = 1789773f / 1000000f;
System.out.printf("\n%.2f", f);
// 输出结果: 1.79
这是在使用变量时发生的情况:
int CLOCK = 1789773;
System.out.printf("\n%.2f", (float)CLOCK / (10^6));
// 输出结果: 13410.48
发生了什么?我不得不使用字面量'1000000f'而不是10^6才能使其正常工作。另外,我认为将除法元素之一转换为(float)会将所有内容都设置为浮点数,我不会最终执行整数运算。
英文:
I have been trying to do something simple with java floating point division, have read several articles on some minimal changes on values but nothing like I am having below.
This is the expected:
float f = 1789773f / 1000000f;
System.out.printf("\n%.2f", f);
Outputs: 1,79
This is what happens when I work with variables:
int CLOCK=1789773;
System.out.printf("\n%.2f", (float)CLOCK/(10^6));
Outputs: 13410,48
What is going on? I had to use the literal '1000000f' instead of 10^6 to make it work. Also, I thought that casting the one of the division elements with (float) would set everything as float and I would not end doing integer math.
答案1
得分: 3
10^6
不是一百万。它是12,因为 ^
是按位异或运算符,而不是指数运算。
使用 1e6f
,或者只使用 1000000f
。
英文:
10^6
is not a million. It's 12, because ^
is the bitwise xor operator rather than exponentiation.
Use 1e6f
, or just 1000000f
.
答案2
得分: 1
尝试使用这个代替:
int CLOCK = 1789773;
float fclock = (float) (CLOCK / (Math.pow(10, 6)));
System.out.printf("\n%.2f", fclock);
英文:
Try using this instead :
int CLOCK = 1789773;
float fclock = (float) (CLOCK/(Math.pow(10,6)));
System.out.printf("\n%.2f", fclock);
答案3
得分: 0
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),这对我来说运行正常。
英文:
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)));
Try to use Math.pow(10,6)
, it's working fine for me.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论