当我使用BigDecimal时,为什么它会继续舍入

时间:2014-02-08 20:53:09

标签: java bigdecimal

因此,我试图计算我的平均目标,通过将我停止的次数除以拍摄的次数来计算。如何阻止它舍入我的平均值

counter =目标被阻止 goalCounter =进球得分

avg.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        BigDecimal avgCalc = new BigDecimal(counter/goalCounter);
        tvDisplayAvg.setText("Goal Avg: " + avgCalc);
    }
});

所以我得到它除以得到小数,但有没有办法设置一个限制只分为千分之一的位置?

2 个答案:

答案 0 :(得分:5)

你的舍入来自counter/goalCounter 如果你使用大小数,请坚持下去。

avg.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        BigDecimal c = new BigDecimal(counter);
        BigDecimal g = new BigDecimal(goalCounter);
        BigDecimal answer=c.divide(g);

        tvDisplayAvg.setText("Goal Avg: " + amswer.toString());
    }
});

答案 1 :(得分:-1)

问题可能是countergoalCounter都是整数。当你划分时(例如counter/(double)goalCounter),尝试将其中一个投射加倍。这是因为如果Java看到你将两个整数分开,结果也将是一个整数。

如果它们不是整数(即它们是浮点数或双精度数),则float和double类型的精度有限,并且创建了BigDecimal类来纠正这种情况。制作两个BigDecimals - 每个变量一个 - 然后将avgCalc分配给他们的商。