2017-02-23 5 views
0

Я хочу, чтобы написать это в Java, но я получаю некоторые ошибки, и я не знаю, как писать:BigDecimal математические операции

C = A - (A*B)/100 

Все мои ценности определяются как объекты BigDecimal.

Я пытался что-то подобное, но не работает:

C = A.subtract(A.multiply(B).divide(100)); 

..я получить предупреждение, чтобы добавить больше аргументов для метода деления. Я не знаю, как правильно писать. Что я делаю не так? Заранее спасибо

+1

релевантные [страницы javadoc] (https://docs.oracle.com/javase/8/docs/api/index.html?java/math/BigDecimal.html) – Paul

+1

Вы получаете предупреждение «Разделение метода (BigDecimal) в типе BigDecimal не применим для аргументов (int) ". Не то, чтобы вы добавляли больше аргументов. –

+1

Возможный дубликат [деление bigdecimal на integer] (http://stackoverflow.com/questions/7819553/division-of-bigdecimal-by-integer) –

ответ

2

BigDecimal не имеет divide(int) метод, но это то, что вы просите его сделать с .divide(100), потому что 100 является int буквальным. Если вы ссылаетесь на the documentation, все методы divide принимают BigDecimal экземпляров.

Вы можете использовать divide(BigDecimal) вместо этого, с помощью BigDecimal.valueOf:

C = A.subtract(A.multiply(B).divide(BigDecimal.valueOf(100))); 

(Он принимает long [или double], но int может быть повышен до long.)

Попеременно, для некоторых значений, вы можете использовать вместо этого String:

C = A.subtract(A.multiply(B).divide(new BigDecimal("100"))); 

... особенно если вы имеете дело с значениями с плавающей запятой, которые могут потерять точность в double. 100 подходит для valueOf.

0
c = a.subtract(a.multiply(b).divide(BigDecimal.valueOf(100.0))); 
Смежные вопросы