У меня есть электронная таблица .xlsx с одним номером в верхней левой ячейке листа 1.
Пользовательский интерфейс Excel отображает:
-130.98999999999
Это видно в строке формул, то есть не зависит от количества десятичных знаков, которые должна указывать содержащая ячейка. Это самое точное число Excel будет отображаться для этой ячейки.
В базовом XML мы имеем:
<v>-130.98999999999069</v>
При попытке прочитать книгу с помощью Apache POI, она подает номер из XML через Double.valueOf и появляется:
-130.9899999999907
К сожалению, это не тот номер, который пользователь может видеть в Excel. Может ли кто-нибудь указать мне на алгоритм, чтобы получить тот же номер, который пользователь видит в Excel?
Мои исследования пока показывают, что формат файла Excel 2007 использует слегка нестандартную версию плавающей точки IEE754, где пространство значений отличается. Я верю в плавающую точку Excel, это число падает на другую сторону границы для округления и, следовательно, выходит как бы округленное, а не вверх.