Вот ваша проблема (и это не имеет никакого отношения к Swift вообще): арифметика с плавающей точкой не является точной. Предположим, вы пытаетесь разделить 6.55 на 0.05 и ожидать результата 131.0. В действительности, 6.55 - это «некоторое число, близкое к 6.55», а 0,05 - «некоторое число, близкое к 0,05», поэтому результат, который вы получаете, «некоторое число, близкое к 131.0». Этот результат, вероятно, всего лишь чуть меньше 131.0, может быть, 130.999999999999, а floor() возвращает 130.0.
Что вы делаете: вы сами решаете, какое минимальное число вы хотите округлить. Например, вы хотите, чтобы 130.999999999999 дали результат 131.0. Вероятно, вам понадобится 130.9999, чтобы получить результат 131.0. Таким образом изменить свой код
floor (number * 20.0 + 0.0001);
Это круглый 6,549998 до 6,55, так что проверить, если вы хорошо с этим. Кроме того, floor() работает неожиданным образом для отрицательного ввода, поэтому -6.57 будет округлено до -6.60, что, скорее всего, не то, что вы хотите.
Не 'roundDown (число: 6.56, toNearest: 0.05)' дайте то, что вы хотите? –
Да, вот и все! Я полностью пропустил это. Спасибо – fbelfort
Вот пример, где он терпит неудачу: 'roundDown (число: 100.1, toNearest: 0.05)' дает '100.05' вместо ожидаемого' 100.1'. –