2011-10-19 66 views
3

我想用一个整数除大整数。我舍入了大整数值(如果它是133.333,那么四舍五入的值就是133)。下面是我的代码片段。的恒定大整数除以整数

v1 = v1.setScale(0, RoundingMode.HALF_UP); 
int temp = BigDecimal.valueOf(v1.longValue()).divide(constant1); 

值为12是示出的错误消息

在类型为BigDecimal的方法分(小数)是不适用的参数(INT)

任何人都可以帮我做分工吗?

+0

我被困在这....请有人告诉我笏做... :( –

+0

更新我的答案。 – aioobe

回答

4

变化

.divide(constant1); 

.divide(new BigDecimal(constant1)); 

顺便说一句,你为什么不只是做类似

int temp = (int) (Math.round(v1.doubleValue())/constant1); 

+0

我想这...但现在它表明我必须改变因为想要的结果(显然)是'int',所以最好在数据类型为temp的数据类型中使用 –

+0

右边,所以在行尾添加'.intValue()',然后如果你不想这样做 – aioobe

+0

'int temp = Math.round(v1.longValue())/ constant1;',或者? –

0

您应按如下方式编写代码:

int temp = BigDecimal.valueOf(v1.longValue()) 
     .divide(BigDecimal.valueOf(constant1)).intValue(); 

约BigDecimal和BigInteger的事情是,他们大多与原始类型,这些类的实例,而不是工作。操作结果也是这些类的新实例。

另一种说法:我建议使用静态方法而不是构造函数,因为通过这样做,您可能有可能避免创建新对象。使用构造函数可以显式创建新对象,在这种情况下根本不需要。

+0

我收到这个异常,当我试着这个code10- 19 16:28:42.375:错误/ AndroidRuntime(479):java.lang.ArithmeticException:非终止十进制扩展;没有确切的可表示的十进制结果 –

+0

看看这个问题:http://stackoverflow.com/questions/4591206/non-terminating-decimal-expansion-no-exact-representable-decimal-result,它显示那里如何避免通过使用舍入这样的错误。 – Malcolm

0
int j = ...; 
BigDecimal bd = new BigDecimal (j);