Как предотвратить выравнивание для округления значения X & Y во флаттере? - PullRequest
2 голосов
/ 30 апреля 2020

Вот код:

double x = -1.0;
double y = 1.0;

final radians = angle * e / 180.0;

y = tan(radians) * x;

return Alignment(x, y);

Затем, когда я распечатываю:

флаттер: радианы: -0.09060951997193932
флаттер: y: 0.09085830765468121
флаттер: x: -1.0
флаттер: выравнивание (-1.0, 0.1)

Вы можете видеть, что значение y 0.090858 ... было округлено до 0,1 в объекте выравнивания, который сделал я потерял свою точность, которая мне нужна для моего приложения.

Как убедиться, что объект выравнивания не округляет мой номер? Все, что я хочу, это чтобы значение y оставалось 0.09085830765468121 вместо 0.1.

Любая помощь приветствуется!

1 Ответ

3 голосов
/ 30 апреля 2020

Точность не теряется.

Когда вы печатаете объект в дротике, вызывается метод toString объекта, чтобы получить строковое представление объекта, которое затем выводится на консоль.

И метод toString класса Alignment это

...
    return 'Alignment(${x.toStringAsFixed(1)}, '
                     '${y.toStringAsFixed(1)})';

и документы toStringAsFixed говорят

результат - это самое близкое строковое представление с точно [цифрами дроби] после цифр десятичная точка. Если [FractionDigits] равно 0, то десятичная точка не указывается

Если вы выполните это

  const y = 0.09085830765468121;
  const x = -1.0;

  print(Alignment(x, y).y);

Вывод будет таким, как ожидалось 0.09085830765468121.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...