为什么我的java代码输出了一个错误的数字?

为什么我的java代码输出了一个错误的数字?,java,Java,我第一次尝试eclipse,我正试图用numpad编程一个计算器。 目前我正在编写逗号函数,但我的代码不起作用 以下是我的小数位代码: System.out.println(first+""); System.out.println(dec_length(first)); first=((first*Math.pow(10, dec_length(first)))+1) / Math.pow(10, dec_length(first)); textfield.setText(""+format.

我第一次尝试eclipse,我正试图用numpad编程一个计算器。 目前我正在编写逗号函数,但我的代码不起作用

以下是我的小数位代码:

System.out.println(first+"");
System.out.println(dec_length(first));
first=((first*Math.pow(10, dec_length(first)))+1) / Math.pow(10, dec_length(first));
textfield.setText(""+format.format(first));
dec_length()方法是:

当我尝试它时,它在小数点后的前2位有效,但随后它停止工作

以下是控制台输出:

5.0
1
5.1
2
5.109999999999999
16
5.109999999999999
16
5.109999999999999
16

有人知道这有什么问题吗?

问题是,您假设所有小数位数都可以用双精度类型精确表示。但事实并非如此

我建议您将数字存储为字符串,直到将其用于计算:

String first = "0";
然后添加一个数字或逗号(当然,您应该确保您的号码中只有一个
):

然后,当您想要执行计算部分时,您可以轻松地将字符串解析为双精度:

double value = Double.parseDouble(first);

问题在于,您假设所有小数位数都可以用double类型精确表示。但事实并非如此

我建议您将数字存储为字符串,直到将其用于计算:

String first = "0";
然后添加一个数字或逗号(当然,您应该确保您的号码中只有一个
):

然后,当您想要执行计算部分时,您可以轻松地将字符串解析为双精度:

double value = Double.parseDouble(first);

您是否可以包括您实际希望输出的内容?很难理解您试图实现的目标。此外,请提供用于生成报告输出的代码,并提供更多关于放置用于“小数点”的四行代码的上下文。小数点代码位于计算器按钮“1”的if语句中。输出由第一个代码示例的前两行生成。我希望输出为5.0-1(5.0是当前数字,1是小数位数)。5.1099。。。应该是5.11,但那不起作用。一般来说,我试着通过点击按钮“5”,然后点击按钮“1”,然后点击四次按钮“1”来写数字5.1111,但它在5.11停止工作。你能包括你真正想要的输出吗?很难理解您试图实现的目标。此外,请提供用于生成报告输出的代码,并提供更多关于放置用于“小数点”的四行代码的上下文。小数点代码位于计算器按钮“1”的if语句中。输出由第一个代码示例的前两行生成。我希望输出为5.0-1(5.0是当前数字,1是小数位数)。5.1099。。。一般来说,我试着通过点击按钮“5”,然后点击按钮“,”再点击按钮“1”四次来写数字5.1111,但它在5.11停止工作
double value = Double.parseDouble(first);