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

时间:2011-02-23 01:20:30

标签: java casting

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

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

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

  float theta = .01f;

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

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