Codegolf — Округление От Нуля

  • Автор темы Austral
  • Обновлено
  • 21, Oct 2024
  • #1

Округлить от нуля

Вдохновлено Округление в сторону нуля.

Учитывая число, введенное любым разумным методом, округлите число «от нуля» - положительные числа округляются вверх, а отрицательные числа округляются вниз.

Если вы собираетесь принимать входные данные в виде строки (например, через STDIN), вы должны иметь возможность обрабатывать числа с десятичной точкой или без нее. Если вы принимаете его как число, оно должно, по крайней мере, иметь возможность обрабатывать значения с плавающей запятой (двойная точность не требуется) или рациональные числа.

При желании вы можете вывести число с плавающей запятой с десятичной точкой (например, 42,0). (Или даже попросите некоторые тестовые примеры выводить данные с плавающей запятой и некоторое целое число, если это сделает ваш ответ короче.)

Стандартные лазейки не допускаются и т.д. и т.п.

Тестовые случаи

 -99.9 => -100
-33.5 => -34
-7    => -7
-1.1  => -2
0     => 0
2.3   => 3
8     => 8
99.9  => 100
42.0  => 42
-39.0 => -39
 

Ссылка на песочницу

#код-гольф #номер

Austral


Рег
27 May, 2016

Тем
92

Постов
218

Баллов
688
  • 26, Oct 2024
  • #2

Эксель, 13 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       # Implicit input
ȧ     # Absolute value

⌈    # Ceiling

∆±  # Change to the sign of input

# Implicit output
 

Альтернатива

ȧ⌈∆± ||answer||

Р, 32 байта

r ||answer||

Желе, 4 байты

x->sign(x)ceil(abs(x))

Монадическая ссылка, принимающая число, возвращающее целое число.

Попробуйте онлайн! Или увидеть набор тестов.

Как?

x->x+sign(x%=1)-x ||answer||

Java (JDK), 18 байт

$a,$u="$args"|% s*t '.' # splits the input as a string using '.' [!+$u] # if there are no decimals ( ,$a) # return the int part as is ((1,-1)[$a-lt0]+$a) # return the int part + or - one depending of the sign of the input

Попробуйте онлайн!

Пояснения

Использует $a,$u="$args"|% s*t '.' (((1,-1)[$a-lt0]+$a),$a)[!+$u] as input and output. $a,$u=$args-split'\.' (1,-1)[2*!+$u+($a-lt0)]+$a есть метод [int]("$args"-replace'\.0*[^0]','.9') который задает масштаб числа. Первый параметр — количество цифр после точки-разделителя, второй — режим округления. s=>~~s+Math.sign(s%1) is the "away-from-zero" rounding and has a value of $_&&=$F[0]+($_!=int&&$_*(@F-1)/abs) поэтому я жестко запрограммировал это значение.

 

ЛеНо4кА


Рег
12 Apr, 2011

Тем
64

Постов
205

Баллов
555
  • 26, Oct 2024
  • #3

Vim, 36 байт/нажатий клавиш

-pF/\./

Попробуйте онлайн! или Проверьте все тестовые случаи!

Объяснение:

#!/bin/sed -rf # identify integers /^-?[^.]*(\.0*)?$/ b isInt # add a leading 0 if we'll need it later s/^(-?)9/\109/ # convert to format: -?[0-9]_[0-8]9* s/([0-8]9*)\..*$/_\1/ # move the part that will remain constant into the hold buffer h s/.*_// # [0-8]9* can be incremented via character substitution y/0123456789/1234567890/ # reassemble parts G s/(.*)\n(.*)_(.*)/\2\1/ :isInt # Get rid of anything after the decimal point s/\..*$// ||answer||

Питон 3, 23 байта

/^-?[^.]*(\.0*)?$/bQ s/^(-?)9/\109/ s/([0-8]9*)\..*$/_\1/ h s/.*_// y/0123456789/1234567890/ G s/(.*)\n(.*)_(.*)/\2\1/ :Q s/\..*$//

Попробуйте онлайн!

-1 байт благодаря кснор

 

Trend2


Рег
16 Aug, 2010

Тем
69

Постов
187

Баллов
542
  • 26, Oct 2024
  • #4

Желе, 5 4 байта

-r

Попробуйте онлайн!

Это порты рекурсивныйОтвет Stax в Jelly, так что проверьте этот ответ для объяснения.

-1 байт благодаря Ник Кеннеди

Желе, 6 5 байт

{⍎'⌈⌊'[0>⍵],⍕⍵} ⍝ Main function, argument ⍵. ⍕⍵ ⍝ Stringified argument , ⍝ Appended to [0>⍵] ⍝ This item... (0 if ⍵ is positive or 0, else 1) '⌈⌊' ⍝ of this string (which are the functions Ceiling and Floor, respectively) ⍎ ⍝ Executed as APL code.

Попробуйте онлайн!

-1 байт благодаря Джонатан Аллан

Как это работает

⎕IO←0 ||answer||

Дж, 6 байт

{⍎'⌈⌊'[0>⍵],⍕⍵}

Попробуйте онлайн!

Всего 1 изменение символа с мой ответ на вопрос о кузене.

 

Silmerea


Рег
25 Dec, 2010

Тем
92

Постов
181

Баллов
641
  • 26, Oct 2024
  • #5

JavaScript (ES6), 20 байт

: f ( x -- x ) [ signum ] [ abs ceiling ] bi * >integer ;

Попробуйте онлайн!

Прокомментировал

⌋₁ The input rounded down ℤ₁ is an integer less than -1 | and the output, or, the input ⌉₁ rounded up is the output. ||answer||

C# (визуальный компилятор C#), 41 байт27 байт24 байт

⌉₁ℕ₁|⌋₁

Попробуйте онлайн!

Первый пост здесь, было весело, надеюсь, вам понравится.

Как-то чувствовалось, что место C # здесь пусто
-14 tnx к @expired data

-3 спасибо @night2

 

Ta_raska


Рег
04 Jan, 2007

Тем
80

Постов
224

Баллов
634
  • 26, Oct 2024
  • #6
Рунические чары ⌋₁ℤ₁|⌉₁

, 18 16 байт

Попробуйте онлайн! <?=($argn>0?:-1)*ceil(abs($argn)); is the closest thing to an infinitesimal in language's operators. With a properly functioning ceil «Добавляет» (от нуля) 0,999999 и выравнивает результат. floor as input.

команда, ответ теперь поддерживает

 

Maxima1


Рег
20 Sep, 2006

Тем
67

Постов
196

Баллов
571
  • 26, Oct 2024
  • #7
, 6 Стакс <?=[ceil,floor][$argn<0]($argn);

байты

Запустите и отладьте его

  1. Процедура:
  2. Абсолютное значение
  3. Потолок
Умножить на исходный знак

 

Rozo2010


Рег
03 Feb, 2017

Тем
80

Постов
186

Баллов
596
  • 26, Oct 2024
  • #9
Шелуха ‼ apply next two operators to (implicit) input σ sign (-1, 0, or 1) ± absolute value ü ceiling of that absolute value * multiply the rounded absolute value with the sign

, 5 байт Попробуйте онлайн!

Просто берет знак входных данных, умноженный на потолок его абсолютного значения.

 

Helldoc


Рег
10 Nov, 2009

Тем
87

Постов
184

Баллов
629
  • 26, Oct 2024
  • #10
Ретина 0.8.2

, 38 байт Попробуйте онлайн!

‼σ±ü*

Ссылка включает тестовые примеры. Объяснение:

{ } # Anonymous block .abs # Absolute value %-1 # Modulo -1 *.sign # Multiply by sign $_- # Subtract from original

Удалите нули после десятичной точки, чтобы число не было целым; следующие два совпадения завершаются неудачно, если после десятичной точки нет цифр. {$_-.abs%-1*.sign} s, prefix a Sign@#⌈Abs@#⌉& Если целая часть — это все

Ä # The absolute value of the (implicit) input, î # ceiled * # And then multiplied by .± # the signum I # of the input # (after which the result is output implicitly)

чтобы позволить приращению переполниться.

ÄîI.±*

Увеличить целую часть числа.

Удалить дробную часть числа.

 

Victor57ua


Рег
08 Sep, 2006

Тем
60

Постов
201

Баллов
501
  • 26, Oct 2024
  • #12
Перл 6 9

, 18 байт

Попробуйте онлайн!

\b9+\.. 0$& ||answer||

ОбъяснениеМатематикаГольф

\.0+ .

, 5 байт

Попробуйте онлайн!

Объяснение \.0+ . \b9+\.. 0$& T`9d`d`.9*\.. \..* operator.

*±¹⌈a ||answer||

Приятно найти применениеЕсли число не целое, к нему добавляется знак -1 (для отрицательных десятичных знаков) или 1 (для положительных десятичных знаков), а затем печатается целая часть нового числа.

#define f(n)(int)(n>0?ceil(n):floor(n))

, 30 байт

Попробуйте онлайн!


этого.PHP

å├╪∙Bß

, 32 байта

Попробуйте онлайн! 0 of input if it is less than 0, else Trunc(x) В основном выходные данные


PHPPHP

µ

, 34 байта

Попробуйте онлайн!

 

Seereplypew8


Рег
27 Feb, 2008

Тем
73

Постов
207

Баллов
612
  • 26, Oct 2024
  • #13
Брахилог 1µ-i:'-A{*+'.A@

, 7 байт

Попробуйте онлайн! s=>(int)s+Math.Sign(s%1) .

n => // n = input n % 1 ? // if n is not an integer: n < 0 ? // if n is negative: ~-n // return -(floor(-n) + 1) = -floor(-n) - 1 : // else: -~n // return -(-(floor(n) + 1)) = floor(n) + 1 : // else: n // return n unchanged ||answer||

илиФактор

n=>n%1?n<0?~-n:-~n:n

, 57 байт

Попробуйте онлайн!

 

Wax


Рег
07 May, 2006

Тем
75

Постов
188

Баллов
603
  • 26, Oct 2024
  • #14
APL (Диалог Юникод) **>.@|

, 15 байт

Попробуйте онлайн! ĊḞ>?0 - Monadic link. Takes a float, x, as argument ? - If: > 0 - x > 0 - Then: Ċ - ceil(x) - Else: Ḟ - floor(x) .

Простой Дфн. Использование

ĊḞ>?0 ||answer||

Как: AĊ×Ṡ flag

lambda i:i-i%(1|-(i>0))

sed, 131 байт + 2 байта для

:s/ " Replace... - " A dash /-<Space> " With a dash and a space :g/ " On Every line matching this regex... \. " A dot .* " Followed By anything [1-9] " Followed by a digit other than 0 /norm " Run the following keystrokes... <C-v><C-a> " Increment the number by 1 " This also conveniently places our cursor just before the dot l " Move one character right D " Delete everything after the cursor :s/ " Replace... <Space> " A space " (With nothing) ||answer||

без гольфа :s/-/-<Space> :g/\..*[1-9]/norm <C-v><C-a>lD :s/<Space><cr> , 35 bytes

0

Перл 5

Попробуйте онлайн!

 

Anabu


Рег
03 Nov, 2006

Тем
70

Постов
187

Баллов
557
  • 26, Oct 2024
  • #15
ROUND_UP

JavaScript (node.js), 30 23 21 байт

Вдохновленный ответом C#.

Спасибо @Value Ink и @Gust van de Wal за -7 байт!

Еще раз спасибо, @Gust van de Wal, за еще -2 байта!

 

DmCho


Рег
19 May, 2006

Тем
63

Постов
210

Баллов
555
  • 26, Oct 2024
  • #17
Ядро PowerShell BigDecimal

, 54 48 байт

Попробуйте онлайн! Спасибо @mazzy

для улучшения игры в гольф!

BigDecimal

Оригинальная реализация

Попробуйте онлайн!

d->d.setScale(0,0) ||answer||

ПоясненияЮля 1.0

, 17 байт Сэкономьте 6 байт благодаря потрясающим комментариям!

ĊṠ¡Ḟ - Link: number, N ¡ - repeat... Ṡ - ...number of times: sign of N (repeating -1 is the same as 0 times) Ċ - ...action: ceiling Ḟ - floor (that)

МаркМуш

Попробуйте онлайн!

ĊṠ¡Ḟ

Альтернатива с 22 байтами

Попробуйте онлайн!

 

Vuddydyem


Рег
18 Oct, 2005

Тем
76

Постов
183

Баллов
583
  • 26, Oct 2024
  • #18
x=scan() sign(x)*ceiling(abs(x)) , 5 Виксал

4 байта

=EVEN(A1*2)/2

Встроенные модули, о существовании которых я раньше не подозревал, FTW!

Попробуйте онлайн!

=ROUNDUP(A1,)
 

Олександр Дорош


Рег
18 Nov, 2011

Тем
79

Постов
199

Баллов
624
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно