Вкратце - мне тяжело с оставшимися кадрами с плавающей точкой
(т. е. 10,00000123 вместо 10)
Вот и я:
Мне нужно сгенерировать список с плавающей запятой следующим образом
(на самом деле это карта, мне нужно вернуть объектный орех, не обращайте на это внимания)
Список А: 0,25, 0,5, 0,75, 1, ...
или
Список B: 0,01, 0,02, 0,03, 0,04, ...
каждый раз, когда я получаю число и округляю его до ближайшей ячейки в списке.
Допустим, я получил 0,051, чтобы получить ячейку в списке A - я возвращаю 0,05.
Допустим, я получил 0,21, чтобы получить ячейку в списке B - я возвращаю 0,25.
Итак, я начал делать это
float a = Math.round(Value / step) * step;
но чем больше времени я получаю 0.2500001 (остатки поплавка)
Мне нужен умный способ, чтобы обойти это.
Может быть, взять число цифр после точки и повторить
Math.round(Value / 100) * 100;?
Есть ли умнее?
Я попытался сделать это
final float factor = Math.round(1 / step);
final float value = (float) Math.round(value * factor) / factor;
но у меня иногда есть такой список
Список А: 10, 15, 20, 25, 30, ...
и когда я получаю 22, я получаю ячейку 20.
проблема в том, что когда я получаю разрыв 10
Math.round(1 / baseAssetStep)
возвращает 0 - и я получаю NaN