诸如0.1和0.2之类的小数等于0.30000000000000004

时间:2014-03-27 01:42:47

标签: java swing floating-point decimal

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

我得到以下内容:

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.79999999999999999
0.89999999999999999
0.99999999999999999
1.09999999999999999

我的代码是:

  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加在一起,而不会产生大量的小数位。

我尝试过添加

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

虽然它将其向下舍入为0,因此标签不会更新。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

如果您想要精确的小数加法,则需要使用BigDecimal代替double

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

答案 2 :(得分:1)

有些小数无法用floatdouble表示,因此差异足够小。仅仅因为计算机使用二进制数系统。例如,计算机将始终无法代表1/3。

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

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