我不知道';我不知道如何在Java中转换为float

我不知道';我不知道如何在Java中转换为float,java,casting,Java,Casting,我将一些代码从Processing移植到Java,我遇到的一个问题是Processing的预编译器将任何双精度转换为浮点。然而,在Eclipse中,我不得不显式地将我的值转换为float。尽管如此,我还是会犯一些我不理解的错误。例如,在这个语句的末尾放一个f不应该修复类型不匹配(类型不匹配:无法从double转换为double)吗 浮动汇率) 即使在这样简单的语句中,我也会得到类型不匹配。我做错了什么 float theta = .01f; 根据Java标准,您的第二条语句是正确的,但在您

我将一些代码从Processing移植到Java,我遇到的一个问题是Processing的预编译器将任何双精度转换为浮点。然而,在Eclipse中,我不得不显式地将我的值转换为float。尽管如此,我还是会犯一些我不理解的错误。例如,在这个语句的末尾放一个f不应该修复类型不匹配(类型不匹配:无法从double转换为double)吗 浮动汇率)

即使在这样简单的语句中,我也会得到类型不匹配。我做错了什么

  float theta = .01f;

根据Java标准,您的第二条语句是正确的,但在您的第一个示例中,Java可能试图阻止您将double转换为float,因为程序员必须明确要求精度降低,因此:

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
后缀仅直接在文本上有效,而不是在整个表达式之后有效。因此,用以下两种方法之一编写它(假设spring是一个float[]):

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


(在这两种情况下,
.05
.17
之间的括号(以及匹配的括号)通常是多余的,因为乘法是关联的。它可能会对真正大的
n
值产生一些差异,但在这些情况下,您通常需要另一种方式来避免溢出。)

。。。这是故意的还是打字错误?一个打字错误,我不小心把两者弄混了。你真的需要使用浮动吗?或者你的程序也可以用双精度运行吗(内存占用更多,结果更精确)?这可能更容易:-)我还不清楚双打和浮动的区别。是否有一页对此进行了解释?浮点是32位单精度浮点值,双精度是64位双精度,请参阅
springing[n] = (float)(.05*(.17*(n+1)));
springing[n] = .05f*(.17f*(n+1)); 
springing[n] = (float)( .05*(.17*(n+1)));