Javafx XYChart, устанавливая десятичное значение оси Y, создает больше десятичных знаков - PullRequest
0 голосов
/ 26 мая 2020

Я создал XYChart, где ось X - это имена, а ось Y - десятичные числа (числа с плавающей запятой).

Проблема в том, что когда я меняю списки диаграмм из таблицы с помощью слушателя, он отлично работает, но когда Я меняю его с помощью кнопки «вперед», это не так.

кнопка вперед, выбирает только следующий элемент таблицы, поэтому теоретически должен работать, поскольку выполнение этого вручную работает. Но это не так.

Отладка кода Я понял, что при вставке значений в диаграмму, вручную выбирая строку таблицы, десятичное число, вставленное внутри объекта XYChart, будет: 3.692

, но выбирая из кнопка приводит к чему-то вроде: 3.6919999999004857554

Я пробовал:

  • Прямое использование float
  • Прямое использование double
  • Использование BigDecimal напрямую
  • Установка шкалы bigDecimal на 3 значения и режима округления Half Up
  • Создание float и double из BigDecimal
  • Использование String.valueOf, а затем возврат с Float.valueOf
  • Жесткое кодирование значения с плавающей запятой, например 2.2f (Результатом 2.200000000000000324234)

Все они производят «правильное» десятичное число, сохраненное в переменной (decimalNumber в коде), но когда вставлено в На диаграмме они показывают неправильное значение, что в конечном итоге приводит к тому, что мой пользовательский интерфейс ломается sh.

Это строка, в которой вставляются десятичные знаки

dataSerie.getData().add(new XYChart.Data(hour, decimalNumber));

Здесь вы можете увидеть, как добавление новой серии происходит должным образом Correct value

Здесь вы можете ясно увидеть, как добавление новой серии serires НЕ ДЕЛАЕТ go как ожидалось Incorrect value

Как видите, 2.2f вставляется как 2.200000047683716

метод добавления значения в диаграмму

private void addDataToSerie(XYChart.Series dataSerie, String hora, float consumo) {
    dataSerie.getData().add(new XYChart.Data(hora, 2.2f));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...