我分了124/13。但应用程序被迫关闭。 这是我的代码:
Float x =Float.valueOf(a.getText().toString());
Float y =Float.valueOf(b.getText().toString());
BigDecimal xx= new BigDecimal (x);
BigDecimal yy= new BigDecimal (y);
BigDecimal rx= xx.divide(yy);
res.setText("=" + rx);
答案 0 :(得分:3)
应用可能会崩溃,因为BigDecimal.toString()
会发生意外情况。此外,a
或b
或rx
可能为null
。
无论如何,我会考虑将BigDecimal
与String
构造函数一起使用,以免出现舍入错误:
String x = a.getText().toString();
String y = b.getText().toString();
BigDecimal xx = new BigDecimal(x);
BigDecimal yy = new BigDecimal(y);
BigDecimal rx = xx.divide(yy);
res.setText("=" + rx.toPlainString());
同时写下new BigDecimal(x)
而不是new BigDecimal (x)
。请注意省略的空格,这可能是您的应用程序崩溃的原因,Java中不允许这样做。
答案 1 :(得分:1)
您遇到过:
java.lang.ArithmeticException: Non-terminating decimal expansion;
no exact representable decimal result.
考虑这个例子,它会产生这个确切的异常:
BigDecimal x = new BigDecimal(1);
BigDecimal y = new BigDecimal(3);
BigDecimal result = x.divide(y);
那是因为没有0.3333(3)
的确切表示。
您需要做的是指定舍入和精度:
BigDecimal result = x.divide(y, 10 /*scale*/, RoundingMode.HALF_UP);
System.out.println(result); //will print "0.3333333333"
另请注意,您应直接从BigDecimal
创建String
,因为float
不是精确的表示形式。考虑一下:
String s = "0.123456789";
System.out.println(Float.parseFloat(s)); //prints 0.12345679
System.out.println(new BigDecimal(s)); //prints 0.123456789
可能是您想要近似结果的情况。然后只需使用float
或double
:
dobule x = Double.parseDouble(a.getText());
dobule y = Double.parseDouble(b.getText());
res.setText("=" + (x/y));