请原谅我的无知,我是初学者。
有谁能告诉我为什么我在下面的if / else语句中获取我的错误代码?我认为ln乘法的结果与标准乘法不完全相同(存在差异的.00000000006或类似的东西)。有没有解决这个问题?我试过使用DecimalFormat,但无济于事。
如果我添加:
DecimalFormat fmt = new DecimalFormat ("0.###");
到测试人员和
if (fmt.format(z) != fmt.format(result)){
到if语句我收到了同样的错误声明。有什么问题!?
非常感谢。
乔
import java.util.Scanner;
import java.lang.Math;
import java.text.DecimalFormat;
public class Logs {
//integer x field & encapsulation
private static double x;
// x encapsulation
public double getX(){
return x;
}
public void setX (double ex){
if (ex >= 0){
x = ex;
}
else{
System.out.println("You may not choose a negative number, 'x' = 0");
}
}
//integer y field
private static double y;
// y encapsulation
public double getY(){
return y;
}
public void setY (double why){
if (why >= 0){
y = why;
}
else{
System.out.println("You may not choose a negative number, 'y' = 0");
}
}
//tester
public static void main (String [] args){
Logs sample =new Logs();
Scanner var = new Scanner(System.in);
DecimalFormat fmt = new DecimalFormat ("0.###");
sample.setX (var.nextDouble());
sample.setY (var.nextDouble());
x = sample.getX();
y = sample.getY();
double z = (x*y);
double logX = Math.log(y);
double logY = Math.log(x);
double logZ = (logX +logY);
double result = (Math.exp(logZ));
if (z != result){
System.out.printf("%s", "Incorrect answer: be a better coder");
}
else {
System.out.printf("%s %.3d %s %.3d %s %.3d",
"The product of the values you chose is: ", + z,
"\nln(x) + ln(y) is: ", + logZ,
"\nCompute to e: ", + result);
}
}
}
答案 0 :(得分:1)
您正在比较字符串引用而非值,并且您希望String.equals()
例如z.equals(result)
但是,我认为你要做的是将两个十进制数比较到一定的精度。计算差异并确定是否在可接受的误差范围内更直观,例如
if (Math.abs(z - result) < 0.01) {
// ok
}
有关详细信息,请参阅Math.abs(double a)
答案 1 :(得分:0)
我建议尝试
if(!fmt.format(z).equals(fmt.format(result))){
答案 2 :(得分:0)
我认为这是因为双倍。为了获得最佳实践,请使用BigDecimal。 请看一下“Why do I see a double variable initialized to some value like 21.4 as 21.399999618530273?”。
答案 3 :(得分:0)