This question already has answers here:
Multiplying float values “possible lossy conversion from double to float”
(3个答案)
5年前关闭。
我正在学习Java,并且正在阅读Deitel&Deitel的书“Java:如何编程”。在学习的同时,我尝试在后面做练习。我正在从事的具体练习是:
创建一个具有长度和宽度属性的Rectangle类,每个属性的默认值为1。提供用于计算矩形的周长和面积的方法。对长度和宽度都使用set和get方法。设置方法将验证长度和宽度分别是大于0.0且小于20.0的浮点数。编写一个程序来测试Rectangle类。
这是我创建的类:
这是测试类或驱动器类:
当我运行测试类(在IDE中)时,此警告显示:
“不兼容的类型:可能从双精度转换为浮点型。”
我不明白为什么IDE会发出此警告。有人可以帮忙吗?
添加f告诉Java文字是32位浮点数,而不是64位double。您还可以添加演员表:
但最好使用f表示法。
(3个答案)
5年前关闭。
我正在学习Java,并且正在阅读Deitel&Deitel的书“Java:如何编程”。在学习的同时,我尝试在后面做练习。我正在从事的具体练习是:
创建一个具有长度和宽度属性的Rectangle类,每个属性的默认值为1。提供用于计算矩形的周长和面积的方法。对长度和宽度都使用set和get方法。设置方法将验证长度和宽度分别是大于0.0且小于20.0的浮点数。编写一个程序来测试Rectangle类。
这是我创建的类:
package rectangle;
public class Rectangle {
public float rectangle;
public float length;
public float width;
public float perimeter;
public float area;
public Rectangle(float length, float width){
if(length < 0.0 || length >= 20.0){
throw new IllegalArgumentException("Length must be between 0.0 and 20.0");
}
if(width < 0.0 || width >= 20.0){
throw new IllegalArgumentException("Width must be between 0.0 abnd 20.00");
}
this.length = length;
this.width = width;
}
public float getLength(){
return length;
}
public float getWidth(){
return width;
}
public void setPerimeter(float perimeter){
perimeter = ((getLength() *2) + (getWidth()*2));
}
public float getPerimeter(){
return perimeter;
}
public void setArea(float area){
area = getLength() * getWidth();
}
public float area(){
return area;
}
}
这是测试类或驱动器类:
package rectangle;
public class TestRectangle {
public static void main(String[] args){
Rectangle rectangle1 = new Rectangle (3.2, 3.3);
System.out.printf("The perimeter of rectangle1 is: %d%n", rectangle1.getPerimeter());
}
}
当我运行测试类(在IDE中)时,此警告显示:
“不兼容的类型:可能从双精度转换为浮点型。”
我不明白为什么IDE会发出此警告。有人可以帮忙吗?
最佳答案
在Java中,文字值1.0或任何其他常规十进制值被视为双精度(64位浮点值)。您的构造函数将浮点数(32位浮点值)作为输入。您试图将64位数字传递给需要32位数字的函数。 Java绝不会让您做任何可能会降低精度的事情(例如将float传递给int方法或将double传递给float方法)。最好的解决方法是说
Rectangle rectangle1 = new Rectangle (3.2f, 3.3f);
添加f告诉Java文字是32位浮点数,而不是64位double。您还可以添加演员表:
Rectangle rectangle1 = new Rectangle ((float) 3.2, (float) 3.3);
但最好使用f表示法。