java получает неверный результат BeanShell

У меня есть очень большие числа и сложные строковые уравнения для решения в java. Для этого я использую BeanShell. В этих уравнениях также могут содержаться побитовые бинарные операции, например.

 (log(100)*7-9) & (30/3-7)

должно быть 1. Как я уже сказал, мне нужно обрабатывать огромные числа, поэтому я добавляю L к каждому числу, которое до сих пор работает нормально. Но здесь у меня проблема, когда я вычисляю что-то вроде 3/2, я просто получаю 1, а не 1.5. Затем я попытался добавить D для двойных значений к каждому числу, что дает мне 1.5, но здесь я получаю сообщение об ошибке в двоичных операциях and or xor и т. д., потому что, конечно, они могут применяться только к целочисленным значениям.

Есть ли способ получить значения double, когда это необходимо, и при этом выполнять двоичные операции (конечно, только когда у меня есть целые значения)?


person wasp256    schedule 08.10.2013    source источник


Ответы (1)


Я бы с самого начала объявил операнды двойными. Мне кажется, что оставление Beanshell для повышения/понижения на основе ответа вносит неопределенность в ваш код.

Вы можете привести double к int и каждый раз выполнять бинарную операцию. Поскольку это сужающее примитивное преобразование, вам следует ознакомиться с Спецификации языка Java.

(другой, возможно, полезный ответ)

person GaryMcM    schedule 09.10.2013
comment
Когда я всегда привожу правый и левый сайт двоичной операции к int, это будет работать, но я не должен, потому что, когда у меня есть что-то вроде ((5-2)/2) and ((3-2)/2) -> 1.5 and 0.5, я не получу ошибку, просто вырезая десятичную часть... Есть ли альтернатива BeanShell для решения таких уравнений? - person wasp256; 09.10.2013
comment
Почему бы не написать функцию, которая говорит вам, что это целое число? Пример: isInt(i) { return Math.floor(i) == i; } - person GaryMcM; 10.10.2013