Java 断言错误
我已经编写了(如下所示)一个方法getCelsius来将华氏温度转换为摄氏温度,但是当我运行程序时,它会显示一个断言错误 代码: 课堂教学方法:Java 断言错误,java,Java,我已经编写了(如下所示)一个方法getCelsius来将华氏温度转换为摄氏温度,但是当我运行程序时,它会显示一个断言错误 代码: 课堂教学方法: public double getCelsius() { double c = 0; c = ((this.temp_value - 32) * (5 / 9)); return c; } 下面是TestTemperature类中的方法调用,它给了我一个断言错误: Temperature t
public double getCelsius() {
double c = 0;
c = ((this.temp_value - 32) * (5 / 9));
return c;
}
下面是TestTemperature类中的方法调用,它给了我一个断言错误:
Temperature t = new Temperature(212.0, "F");
assert t.getCelsius() == 100.0; // < error in this line
温度t=新温度(212.0,“F”);
断言t.getCelsius()==100.0;//<这行有错误
救命啊 您需要考虑精度/表示。i、 e.按照以下方式进行测试:
assert Abs(t.getCelsius() - 100.0) < epsilon;
您需要考虑精度/表示。i、 e.按照以下方式进行测试:
assert Abs(t.getCelsius() - 100.0) < epsilon;
有两个问题:首先,
5/9
部分使用整数除法,因此它将始终返回0。您需要将5/9
更改为5f/9
或类似内容
其次,
(212f-32)*(5f/9)
并不完全是100.0
:很难进行浮点比较,因为不是所有可以用Java编写的值都可以用IEEE754浮点数表示。因此,您应该像这样比较这两个数字:assert Math.abs(t.getCelsius()-expected)<0.000001
或其他一些所需的最大差异。有两个问题:首先,5/9
部分使用整数除法,因此它将始终返回0。您需要将5/9
更改为5f/9
或类似内容
其次,
(212f-32)*(5f/9)
并不完全是100.0
:很难进行浮点比较,因为不是所有可以用Java编写的值都可以用IEEE754浮点数表示。因此,您应该像这样比较这两个数字:assert Math.abs(t.getCelsius()-expected)<0.000001
或其他一些所需的最大差异。如果您希望这样做的话
// will return "exact" value if input is 212.0 or 32.0
double f2c(double f)
{
return (f-32.0)/(212.0-32.0) * 100.0;
}
assert f2c(212.0)==100.0 ; // true!
assert f2c( 32.0)== 0.0 ; // true!
更一般地说,如果我们有两个端点(x1,y1)
和(x2,y2)
,这个线性插值
y = (x-x2)/(x1-x2) * y1 + (x-x1)/(x2-x1) * y2
将在
x=x1
处对y1
进行“精确”计算,在x=x2
处对y2
进行计算。对double/float/int/short/byte有效,如果您需要的话
// will return "exact" value if input is 212.0 or 32.0
double f2c(double f)
{
return (f-32.0)/(212.0-32.0) * 100.0;
}
assert f2c(212.0)==100.0 ; // true!
assert f2c( 32.0)== 0.0 ; // true!
更一般地说,如果我们有两个端点(x1,y1)
和(x2,y2)
,这个线性插值
y = (x-x2)/(x1-x2) * y1 + (x-x1)/(x2-x1) * y2
将在x=x1
处对y1
进行“精确”计算,在x=x2
处对y2
进行计算。对双精度/浮点数/整数/短字符/字节有效