关于java:0.1和0.2之类的小数等于0.30000000000000004

Decimals such as 0.1 and 0.2 equal 0.30000000000000004

本问题已经有最佳答案,请猛点这里访问。

我有一个按钮,当我按下它时,我希望它更新一个标签(从0.0开始)到+0.1

我得到以下信息:

1
2
3
4
5
6
7
8
9
10
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.79999999999999999
0.89999999999999999
0.99999999999999999
1.09999999999999999

我的密码是:

1
2
3
4
  double Number = Double.parseDouble(txtNumber.getText());
  double Generator = 0.1;
  Number = (Number + Generator);
  txtNumber.setText(Number +"");

我知道计算机处理数字的方式不完全是0.3,而更像是0.2999999…我只是想找一种方法把数字四舍五入,这样我就可以很容易地把0.1(to)0.9加在一起,而不需要大量的小数点。

我已经尝试添加

1
Math.round((Number + Generator) * 100) / 100;

尽管它向下舍入到0,所以标签不会更新。


如果需要精确的十进制加法,则需要使用BigDecimal代替double

1
2
3
4
BigDecimal number = new BigDecimal(txtNumber.getText());
BigDecimal generator = new BigDecimal("0.1"); // The"" marks are important
number = number.add(generator);
txtNumber.setText(number.toString());

1
String myNumberString = String.format("%1.1d", Double.valueOf(myNumber));


有些小数不能用floatdouble来表示,这样的差别就足够小了。仅仅因为计算机使用二进制数字系统。例如,计算机总是不能代表1/3。

您可以使用一种格式,使用以下代码将数字四舍五入为一位小数:

1
2
double value = 0.3d;
String.format("%1.1d",value);