Есть ли способ использовать более точную реализацию «числа» в JavaScript в GraalJS?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Есть ли способ использовать более точную реализацию «числа» в JavaScript в GraalJS?

Сообщение Anonymous »

У меня есть Java-приложение, в котором пользователь может писать (в основном простые) сценарии JavaScript, чтобы определить, как вычислять определенные числа. В Java эти числа имеют тип BigDecimal, чтобы избежать неточностей с плавающей запятой.
Я хочу имитировать поведение BigDecimal в JavaScript, при этом пользователю не нужно ничего об этом знать.
В идеале мне нужен простой скрипт, который вычисляется в GraalJS выглядит так
var x = 0.1;
var y = 0.2;
var z = x + y;
z;

чтобы вернуть 0,3 (а не 0,3000000004) и не менять синтаксис.
Я попробовал использовать BigDecimals самостоятельно, чтобы уменьшить неточности, и это работает это нормально, но требует изменения синтаксиса.
В дополнение к этому я использовал перегрузку операторов, которая, по крайней мере, упростила часть вычислений, но переменные все равно нужно было бы явно создавать как BigDecimal (с Перегрузка оператора):
var x = new BigDecimalWithOperatorOverloading(0.1);
var y = new BigDecimalWithOperatorOverloading(0.2);
var z = x + y;
z;

=> returns 0.3

Далее я рассмотрел определение прокси для номера, но это не сработало:
const globalProxy = new Proxy(globalThis, {
set(target, prop, value) {
if (typeof value === "number") {
value = new BigDecimalWithOperatorOverloading(value);
}
target[prop] = value;
return true;
},
get(target, prop) {
return target[prop];
}
});

const originalPrototype = Object.getPrototypeOf(globalThis);

var x = 0.1;

=> typeof x is number (should be BigDecimalWithOperatorOverloading)


Подробнее здесь: https://stackoverflow.com/questions/792 ... ript-in-gr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»