2015-03-24 68 views
0
public void actionPerformed(ActionEvent ae) { 
    float x, y; 
    if(ae.getSource()==z) { 
     x= Float.parseFloat(a.getText()); 
     y= x*x*3.14; 
     Boomer.setText(String.valueOf(y)); 
    } 
} 

我正在制作乘法GUI。我已经做了一些之前,但这一个稍有不同。这一个不同之处,因为我特别允许用户通过输入半径找到一个圆的区域。将用户输入乘以十进制数

我简单地写这个代码就像任何其他基本的数学函数相关的程序,但我指定了圆的面积方程。这是问题出现的地方。当我指定必须使用小数来查找输出时,程序无法工作。例如,如果我要告诉它做x * x * 10,它可以正常工作。我只能假设问题源于小数。

+1

因此,当您不执行'x * x * 10'并使用小数如x * x * 3.14'时会发生什么?你是否收到错误信息或者是否有价值? – DigitalNinja 2015-03-24 22:54:11

+0

下面是我得到的错误消息: BaffleGUI.java:39:错误:不兼容的类型:可能有损耗从双倍转换为浮点 – BillClintonInSpace 2015-03-24 23:05:43

+0

好吧,所以我认为你可以做zachjack的答案或简单地将3.14转换为像这样的float: y = x * x *(float)3.14;'并且错误应该消失(如果您不关心“有损转换”)。 – DigitalNinja 2015-03-24 23:07:47

回答

0

我的猜测是3.14被编译为Double而不是Float。

我会推荐使用Math.PI而不是只是3.14,然后将值更改为双精度。这应该解决任何问题。

0

您可以将此行更改为此y= x*x*(float)3.14;

1

很明显,3.14是一个双值。因此,下面这行代表不兼容的类型。它试图将3.14双精度浮点数转换为浮点数。

float pi = 3.14; 

这是一种可能的方式:

float pi = 3.14f; 

这是另一个问题:

float pi = (float) 3.14; 

你应该采取zachjack的建议得到精确的结果。 Math.PI也相当于双倍。因此,您应该使用以下线计算面积:

y = x * x * (float) Math.PI;