我不知道如何使用Java进行浮动

我正在将一些代码从Processing转移到Java,而我遇到的一个问题是处理的预编译器将任何双精度转换为浮点数。 但是在Eclipse中,我必须显式地将我的值转换为float。 尽管如此,我还是得到了一些我不理解的错误。 例如,不应该在此语句的末尾添加f修复类型不匹配(类型不匹配:无法从double转换为float)?

springing[n] = .05*(.17*(n+1))f; 

即使是像这样简单的陈述,我也会遇到类型不匹配的问题。 我究竟做错了什么?

  float theta = .01f; 

好吧,你的第二个陈述是正确的Java标准,但在你的第一个例子中,Java可能试图阻止你将双精度转换为浮点数,因为程序员必须明确要求精度损失,如下所示:

 double a = //some double; float b = (float) a; //b will lose some of a's precision 

根据Java语法, f后缀仅适用于浮点文字。 你的第二个陈述应该有效。 第一个是表达式,因此需要一个演员:

 springing[n] = (float)(.05*(.17*(n+1))); 

在第一个示例中, f后缀仅在文字上有效,而不是在整个表达式之后。 所以用这两种方式写它(假设springing是float []):

 springing[n] = .05f*(.17f*(n+1)); springing[n] = (float)( .05*(.17*(n+1))); 

第一个在float中进行整个计算(除了n+1部分),第二个计算为double,然后仅将结果转换为float。

(在这两种情况下, .05.17之间的括号(以及匹配的括号)通常是多余的,因为乘法是关联的。它可能对n真正大值有所不同,但在这些情况下你通常会想要其他避免溢出的方法。)