2015-08-10 2 views
4

Я хочу округлить десятичное число до ближайшего натурального числа. Пример:Как округлить BigDecimal меньше 1

public static void main(String[] arguments){ 
    BigDecimal a=new BigDecimal("2.5"); 
    BigDecimal b=new BigDecimal("0.5"); 
    System.out.println(a.round(new MathContext(1,RoundingMode.UP))); 
    System.out.println(b.round(new MathContext(1,RoundingMode.UP)));  
    } 

Ожидаемый результат

3 
1 

Реальный выход

3 
0.5 

Проблема заключается в том, что число 0,5 округляется до 0,5 вместо 1 Как Округление BigDecimal меньше чем 1

+1

это ошибка или что-то еще, все еще интересуется intvalue = intvalue.setScale (0, RoundingMode.UP); хорошо работает –

+1

Да, setScale (0) работает, но я понятия не имею, почему метод BigDecimal round работает так. – PcAF

ответ

1

Что-то вроде:

BigDecimal intvalue= new BigDecimal("0.5"); 
intvalue = intvalue.setScale(0, RoundingMode.HALF_UP); 
+0

RoundingMode.UP –

+1

@JishnuPrathap Только если вы хотите, чтобы '0,3' также округлялся до' 1'. 'HALF_UP' обычно безопаснее. – Pshemo

+0

@Pshemo OP использовал RoundingMode.UP в своем вопросе, а HALF_UP и UP используются для разных целей. Они просто разные, а не саффер или что-то –

2

Это сделает то, что вы хотите ...

BigDecimal a=new BigDecimal("2.5"); 
BigDecimal b=new BigDecimal("0.5"); 
System.out.println(Math.round(a.doubleValue())); 
System.out.println(Math.round(b.doubleValue())); 

Это даст вам результат, как 3 and 1 ...

+0

Это также даст ему 3 для ввода 2.1 –

+0

@ZaidMalhis Спасибо ... Обновлен мой ответ за это – CoderNeji

+2

, но double не может хранить точно большинство значений BigDecimal –

0
System.out.println(Math.round(b.doubleValue())); 
+0

Вы спрашиваете или говорите? – rptwsthi

+0

Правильно ли (что вы хотите)? –

1
BigDecimal b=new BigDecimal("0.5"); 
b = b.setScale(0,BigDecimal.ROUND_HALF_UP); 
System.out.println(b.round(MathContext.DECIMAL32)); 
1

Вы можете использовать ниже код, чтобы закруглить BigDecimal меньше 1.

BigDecimal a = new BigDecimal("2.5"); 
    BigDecimal b = new BigDecimal("0.5"); 

    System.out.println(a.setScale(0, RoundingMode.UP)); 
    System.out.println(b.setScale(0, RoundingMode.UP));