Умножение с помощью Java, JavaScript, Oracle и Windows Calculator - PullRequest
0 голосов
/ 06 февраля 2012

Javascript код:

var unitPrice,shippintObj;
var temp2=parseFloat(unitPrice * shippingObj.value);
document.getElementById("pAmountId"+shippingId).value =temp2.toFixed(3) ; 

Выход: -

563361462829470100000

Java-код:

    double b;
long a;
a=456322789;
b=1234567890120.145;
System.out.println(a*b);
DecimalFormat ft=new DecimalFormat("#############################.###");
String  c=ft.format(a*b);
System.out.println(c);

вывод: -

   5.633614628294701E20
   563361462829470100000

Oracle (SQL):

  select 
   to_char(456322789*1234567890120.145,'999999999999999999999999999999999D999')
  from dual;

выход: -

  563361462829470111484.4050

Оконный калькулятор:

    a=456322789;
    b=1234567890120.145;

Результат: -

    563361462829470111484.4050

Наконец, моя проблема в том, что когда я делаю вычисления с помощью калькулятора Java, Javascript, SQL и Windows, мой результат такой же для Java, Javascript но это отличается от ответа SQL, калькулятора Windows. Я хочу получить результат Oracle в Java и в Javascript тоже.

Ответы [ 2 ]

4 голосов
/ 06 февраля 2012

Вы пытаетесь получить слишком большой результат, чтобы поместиться в double с необходимой точностью.Используйте BigDecimal класс в Java для получения произвольной точности, но я боюсь, что вам придется самостоятельно реализовывать длинную арифметику в JavaScript (если вы не найдете хорошую библиотеку, которую сможете использовать).

3 голосов
/ 06 февраля 2012

Для меня это выглядит как арифметическая проблема с плавающей запятой - рассмотрите возможность использования BigDecimal вместо double в вашем java-коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...