2014-02-05 2 views
0

Я пытаюсь использовать номер Advogadro (6.022 * 10^23) в java-программе, и я использую переменную BigDecimal для ее хранения. Однако я хочу умножить его на int или double и все еще держать точность, но это порождает ошибку!Операции с BigDecimal и double в Java

bad operand types for binary operator '*' 
    first type: double 
    second type: BigDecimal 

Есть ли простой способ сделать это? Также есть способ напечатать результат в научной нотации?

Заранее благодарен!

+2

Вы читали javadoc для BigDecimal? –

+0

Просьба указать ваш код, как вы это делаете –

+3

Известная точность номера Avogadro составляет 5.0 × 10-8 (http://www.quickiwiki.com/en/Avogadro_constant), поэтому ее можно представить в виде «двойного» типа, без необходимости использовать «BigDecimal». –

ответ

2

операции поддерживаются только для примитивных типов (и + для струнного)

BigDecimals осуществил операцию как функция.

Вы можете использовать BigDecimals только для операций с BigDecimals. Так что вам нужно преобразовать двойное значение:

BigDecimal result = new BigDecimal(doubleValue).multiply(factor2); 
+0

ОК, но если я хочу применить его к чему-то большому, как к формуле, мне нужно будет сделать это вот так: BigDecimal result = new BigDecimal (doubleValue) .multiply (factor2) .divide (factor3) .add (5.7); (например) –

+1

@AngeloUknown Если вам не нужна более высокая точность, чем двойная, что необычно для вычислений с участием физически измеренных величин, вам было бы лучше просто работать в двойном с инфиксными операторами. –

1

Оберните двойной в BigDecimal первый:

BigDecimal result = yourBigDecimal.multiply(new BigDecimal(yourDouble)); 
1

BigDecimal не примитивный тип. Таким образом, вы действительно не можете применять простые математические (*, -, +) к этому. У этого есть много методов, чтобы поддержать всю основную математику. Вы можете использовать их. В качестве комментария рекомендуем прочитать java doc (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html).

В какой большой десятичной форме есть две основные части. Одна часть содержит число и точность второй части. Так что, если вы хотите обрабатывать специальную математику, которая не является стандартной поставкой вы можете получить эти два значение отдельно и попытаться с более высокими математическими алгоритмами

Quate из Java Doc:

21/110 = 0,190 // целого числа = 190, шкала = 3

0

Сделайте это так;

public class Payment 
{ 
    BigDecimal itemCost; 
    BigDecimal totalCost; // You can initialize it if you wish. 

    public BigDecimal calculateCost(int itemQuantity, BigDecimal itemPrice) 
    { 
     itemCost = itemPrice.multiply(new BigDecimal(itemQuantity)); 
     totalCost = totalCost.add(itemCost); 
     return totalCost; 
    } 
} 

И прочитайте javadoc для BigDecimal.

Смежные вопросы