Цель
Учитывая введенное число, округлите его до ближайшего числа с одной значащей цифрой.
Требования
вход
- Число с плавающей запятой.
- Предположим, что введенное число приводит к выводу в пределах ограничений типа данных (т.е. игнорирует ошибки переполнения.)
- 0 неверный ввод.
- Числа, которые не могут быть точно представлены в типе данных с плавающей запятой (например
"0.35"
, сохраняются как0.3499999
), не должны поддерживаться.
Выход
- Ближайшее число, состоящее из одной ненулевой цифры и любого количества нулевых цифр.
- Результат должен поддерживать отрицательные числа и дробные числа.
- Когда вход находится точно между двумя возможными выходами, округлите от нуля.
презентация
Основное внимание уделяется расчету, а не презентации. Вывод может быть типом данных с плавающей запятой. Это может быть текст в полном объеме или в научной записи. Если вы обнаружите лазейку, в которой представление определенным образом уменьшает количество байт, слава вам!
Примеры
9
-3000
.2
0.2
-.2
7e12
5e-15
1e0
Тестовые случаи
Input Output
1 1
10 10
17 20
99 100
54321 50000
56789 60000
-123 -100
-789 -800
0.23 0.2
0.25 0.3
-0.25 -0.3
4.56e23 5e23
4.56e-23 5e-23
счет
Код с наименьшим количеством байтов после одной недели выигрывает.
Ответы:
MATL , 3 байта
Попробуйте онлайн! Или проверьте все тестовые случаи .
0.25
Сбой теста для компилятора, работающего в Octave на TIO, но работает в Matlab на Windows:Различное поведение вызвано
sprintf
функцией Octave / Matlab, использующей либо «округление банкира», либо «.5 от нуля», в зависимости от платформы. Более подробную информацию и тесты можно найти здесь .Для 6 байтов ,
работает как на Octave, так и на Matlab. Проверьте все контрольные примеры .
источник
C # (.NET Core) , 19 байт
Попробуйте онлайн!
Примеры:
источник
Javascript, 19 байт
источник
0
или25
.0
не имеет смысла для меня. Но0.35
дело в том ... похоже, что Javascript пытается избежать смещения при округлении, но спецификация хочет смещения.0.35
не25
раньше. Я думаю, что он удовлетворяет спецификации для 25 - он возвращает «3e + 1», что мне кажется правильным.0.35
потому что0.35
не имеет точного представления с плавающей точкой. Поведение должно зависеть от браузера; Я получаю25
↦2e+1
в Firefox.Сетчатка ,
6362 байтаПопробуйте онлайн!
источник
0.99
.0.099
и т.д. Моя попытка исправить: попробуйте онлайн!99.99
,100.001
...0.099
, извините. С другой стороны, я думаю, что вы можете удалить+
после;
на третьей строке.PHP , 45 байт
Попробуйте онлайн!
Тот же метод, что и в моем Python 2 ответа.
Также, кажется, правильно обрабатывает
0.35
, что ставит его привязку выше ответа JS: Dисточник
T-SQL, 27 байт
Используя тот же код форматирования .Net, что и в ответе C # Карлоса Алехо . Входные данные из плавающего столбца i в существующей таблице t , в соответствии с нашими стандартами ввода-вывода
Тестовые случаи:
(Довольно удобно, что я могу предварительно загрузить таблицу ввода со всеми этими значениями и запустить их сразу.)
источник
Python 2 , 62 байта
Попробуйте онлайн!
Не используется для игры в гольф на питоне, но это работает.
Сбой
0.35
из-за неточностей с плавающей запятой.Спасибо Anders Kaseorg за указание, что это работает правильно в Python 2
источник
0.25
должен быть0.3
.round
округляется от нуля, а Python 3 округляется до четного, поэтому это работает в Py2, но не в 3.log(x,10)
вместоlog10(abs(x))
.Guile , 23 байта
Попробуйте онлайн!
источник
Excel, 14 байт
источник
Perl 5 , 15 байт
Попробуйте онлайн!
источник
Zsh , 14 байтов
Порт perl ответа. Попробуйте онлайн!
источник
Forth (gforth) , 24 байта
Попробуйте онлайн!
Ожидается ввод в стек с плавающей запятой. Выход на стандартный вывод
Мне не нравится вносить изменения в глобальную (для этого примера) точность выходных функций с плавающей запятой, но это экономит много байтов, чтобы не возвращать предыдущее значение в конце. Не выводит в инженерной или научной нотации, независимо от ввода.
Примечание. По какой-то причине интерпретатор tio преобразуется
0.25
в0.2
, а моя локальная установка преобразуется0.25
в0.3
. Я не совсем уверен, почему это так, но так как я получаю правильный результат локально, я оставляю свой ответ как естьисточник