Я пытаюсь решить проблему:Нежелательные поплавок ожидается целое
Ваша задача состоит в том, чтобы написать простую функцию, которая принимает число метров, и выводит его с помощью метрики prefixes.For это упражнение мы просто хотим единиц больше, чем на метре, от нескольких метров до yottameters, за исключением дкх и значений hectometers.All передаются в будет положительным целыми Пример
meters(51500)
# returns "51.5km"
meters(5000000)
# returns "5Mm"
Мой код:
def meters(x)
map_prefix={ 24=>'Y', 21=> 'Z', 18=> 'E', 15=> 'P', 12=> 'T', 9=>'G', 6=>'M', 3=>'k',0=>'' }
digits=(x.to_i.to_s.size-1)/3
division=x/(10.0**(3*digits))
"#{division}#{map_prefix[3*digits]}m".sub(/\.0([^\d])/,'\1')
end
Это не работает для meters(56*10**24) #->expected 56Ym ,instead got 56.000000000004Ym
, но это работает для больших чисел, таких как meters(88*10**24) #->88Ym
. Код проходит 49 из 50 тестов, может ли кто-нибудь помочь мне найти ошибку?
Два стилистические комментарии. В этом случае вам не нужно использовать 'return'. В Ruby последнее оцениваемое значение подразумевается 'return'ed. Во-вторых, не делайте математику ('x/(10.0 ...') внутри строки. Уродливо и немного сложно следовать. Нет причин для того, чтобы вы не разбивали ее на разные переменные и не создавали свою строку из разных частей. –
Каков ответ, который вы получаете, и какой ответ вы ожидаете от неудачного ввода? –
@JustinWood Спасибо за исправления стиля и быстрый ответ, должен ли я исправить это в сообщении? И я также добавил ожидаемый результат и тот, который я получил вместо этого, забыл добавить информацию. –