Возможно ли использовать более точную реализацию чисел в JavaScript при работе с GraalJS?

У меня есть Java-приложение, где пользователи пишут простые скрипты на JavaScript для расчета некоторых чисел. В Java эти числа представлены как BigDecimal, чтобы избежать неточностей с плавающей запятой.

Я хочу добиться такого же поведения в JavaScript, не усложняя синтаксис для пользователей. Идеально было бы иметь простой скрипт, который выполняется в GraalJS и выглядит так:

var x = 0.1;
var y = 0.2;
var z = x + y;
z;

И чтобы он возвращал 0.3, а не 0.3000000004.

Я пробовал использовать BigDecimal напрямую, что работает, но требует изменения синтаксиса. Также пытался применить перегрузку операторов, но это все равно требует явного создания переменных как BigDecimal.

Есть ли способ добиться точных вычислений с десятичными дробями в JavaScript, сохранив при этом простой и привычный синтаксис? Может быть, есть какие-то хитрости при работе с GraalJS, которые помогут решить эту задачу?

Попробуйте настроить контекст выполнения GraalJS так, чтобы все числа работали как BigDecimal. Это потребует небольшой доработки на стороне Java, сохраняя простой синтаксис для скриптов. Можно также применить прокси-объект или decimal.js для управления точностью. Какие варианты ещё рассматриваете?

слушай, а может стоит рассмотреть вариант с использованием decimal.js? это библиотека для работы с десятичными дробями в js, которая решает проблему точности. ее можно встроить в graaljs и использовать по умолчанию для всех числовых операций. пользователям не придется менять синтаксис, а точность будет на уровне bigdecimal. правда, придется немного доработать контекст выполнения, но зато потом все будет работать как часы. что думаешь насчет такого подхода?

Можно попробовать использовать Proxy для перехвата операций с числами. Создайте обертку над контекстом выполнения, которая будет автоматически преобразовывать числа в BigDecimal при арифметических операциях. Это позволит сохранить простой синтаксис JS, но потребует дополнительной работы на Java-стороне. Еще вариант - написать свой парсер, который будет предобрабатывать скрипты и заменять числа на BigDecimal. Но это сложнее в реализации.