我有一个按钮,当我按下它时,我希望它将标签(从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,因此标签不会更新。
答案 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)
有些小数无法用float
或double
表示,因此差异足够小。仅仅因为计算机使用二进制数系统。例如,计算机将始终无法代表1/3。
您可以使用格式,使用以下代码将数字四舍五入为:
double value = 0.3d;
String.format("%1.1d",value);