шкала баланса клиента как показатель ее валюты - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть 2 класса в проекте Java Hibernate

класс валюты с переменной (экспонента) с (BigDecimal) DataType

&

класс клиента с переменной (баланс) с(BigDecimal) DataType

я хочу установить масштаб баланса в качестве показателя степени

пример:

1) if exponent = 2, and balance = 230.1340098 then balance must be 230.13
2) if exponent = 1, and balance = 230.1340098 then balance must be 230.1
3) if exponent = 3, and balance = 230.1340098 then balance must be 230.134
4) if exponent = 0, and balance = 230.1340098 then balance must be 230
....
....
....

как я могу это сделать?

что я имею в виду, я хочу поставить шкалу баланса клиента в качестве показателя его валюты

Примечание: я пробую BigDecimal.setScale (), но этот метод требует постоянного целочисленного поля dataTypeгде экспонента - BigDecimal и переменная

Ответы [ 4 ]

1 голос
/ 28 ноября 2011

BigDecimal#setScale(...) должно работать:

BigDecimal balance = BigDecimal.valueOf(  230.1340098 );  
BigDecimal exponent = new BigDecimal( 2 ) ; //randomly chosen
BigDecimal rounded = balance.setScale( exponent.intValue(), RoundingMode.HALF_UP ) ); //you can use another rounding mode

Это дает rounded = 230.13.

1 голос
/ 28 ноября 2011

Вы должны извлечь целочисленное значение из exponent-BigDecimal и использовать его в качестве параметра для setScale.Имейте в виду, что вы должны установить RoundingMode:

    BigDecimal bd = new BigDecimal("230.1340098");
    BigDecimal exponent;
    exponent = new BigDecimal("0");
    System.out.println(bd.setScale(exponent.intValue(), RoundingMode.HALF_UP));
    exponent = new BigDecimal("1");
    System.out.println(bd.setScale(exponent.intValue(), RoundingMode.HALF_UP));
    exponent = new BigDecimal("2");
    System.out.println(bd.setScale(exponent.intValue(), RoundingMode.HALF_UP));
    exponent = new BigDecimal("3");
    System.out.println(bd.setScale(exponent.intValue(), RoundingMode.HALF_UP));
0 голосов
/ 28 ноября 2011

Я пытаюсь setScale (), но этот метод требует постоянного целого числа

Нет, оно не требует постоянного целого числа.Может принимать любое целое число.Вы можете использовать BigDecimal.intValue (), чтобы получить показатель степени в качестве требуемого типа данных.

Но BigDecimal - очень странный выбор типа данных для значения показателя.Вы не можете серьезно ожидать, что оно выйдет за пределы целого числа.

0 голосов
/ 28 ноября 2011

Вы можете позвонить intValue() на BigDecimal, чтобы получить желаемый результат.

Фрагмент кода:

private void testBigDecimal(BigDecimal exponent, double balance){
    BigDecimal finalOutput = new BigDecimal(balance);
    finalOutput = finalOutput.setScale(exponent.intValue(), BigDecimal.ROUND_CEILING);
    System.out.println(finalOutput.doubleValue());
}
...