这是我的简单方程计数器。现在它计算具有两个变量的方程式。它基于尝试a
和b
变量的许多组合(4 mil或16 mil)。因此代码运行良好且但是因为我试图将变量b
更改为double,所以出错了。我预计行b=b+0.1
每次第10次设置变量b
为1.0。但几乎是imidiately在开始之后,每个b
出现更多十进制数。所以我使用错误的数据类型?或者我应该用不同的值来引用变量b
?(我也尝试将所有变量都改为加倍)。谢谢你的建议!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Buffer{
static int a;
static double b;
static BufferedReader reader;
static String query;
static int range;
static int result;
public static void main(String[] args)throws IOException{
reader=new BufferedReader(new InputStreamReader(System.in));
System.out.print("Choose speed of test(fast or slow):");
query=reader.readLine();
if(query.equals("fast"))
range=2000;
else
range=4000;
//START THE TEST//
while((a+b)!=26000){
b=b+0.1;
if(b==range+1){
b=0;
a=a+1;
}
if((a+b)!=26000)
System.out.println("a- "+a+", "+"b- "+b+"=false.");
if((a+b)==26000){
System.out.println("a- "+a+", "+"b- "+b+"=true.");
System.out.println("\n"+"Done.You can possibly solve this equation, if a= "+a+" and b= "+b+".");
}
if(a==range&&b==range&&(a+b)!=26000){
System.out.println("\n"+"Tested "+a*b+" options.Solution not found.");
System.exit(0);
}
}
}
}
答案 0 :(得分:4)
您可以使用BigDecimal而不是float / double原语来避免这些问题。其中一些在此处描述:Java Mistake 1 - Using float and double for monetary or financial calculation
答案 1 :(得分:1)
您处理的问题是representation error。类型double不能代表某些值。
这种情况的典型解决方案是使用BigDecimal或Integer类型。
答案 2 :(得分:1)
此处的所有人确实为您提供了另一种解决方案,但我认为您应该了解,为什么数据类型double
不适合您。
问题在于Binary representation
。小数未表示为确切的形式。
比如说:
10 is represented as 1010 in binary
,但,
0.10 is 0.00011001100110011001100110011001 and still going on.....
因此错误发生在double中。正如其他人所建议的那样,选择BigDecimal。
您还可以通过这些链接了解更多相关内容;
希望有所帮助。