Любая система, основанная на IEEE 754 двойной точности, даст тот же ответ. Это включает в себя все основные языки программирования. Это очень частый вопрос. См., Например, Не работает ли математика с плавающей запятой?
Решение состоит в том, чтобы никогда не использовать метод Double.toString () по умолчанию для вывода. Используйте и выведите с указанием c числа десятичных знаков, и проблема исчезнет.
Более сложное решение состоит в использовании рационального представления ваших чисел, поэтому результат 10/3 хранится внутри как рациональное число {numerator:10,denominator:3}
. Это работает для basi c arithmeti c, но не может работать с такими функциями, как cos (x) или sqrt (x). Библиотека анализа парсинга Jep имеет опции для разрешения номера рациона. (отказ от ответственности Я один из авторов Jep).