0에서 반올림


24

0에서 반올림

Round에서 0으로 영감을 얻었습니다 .

합리적인 방법으로 숫자를 입력하면 숫자를 "0에서 멀어짐"으로 반올림합니다. 양수는 반올림하고 음수는 반올림합니다.

입력을 문자열로 가져 오려면 (예 : 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

샌드 박스 링크


STDIN과 같은 문자열 컨텍스트에서 숫자를 사용하는 .0경우 테스트 사례가 제안하는 것처럼 지원해야 합니까?
조 왕

@JoKing yes-- 명확히하기 위해 질문을 업데이트하겠습니다. 이것은 실제로 원래의 사건이었다, 그러나 샌드 박스에있는 사람들은 너무 어, 우리가 모두 함께있는 비 진수 테스트 케이스를 추가, 미안 제안
값 잉크

영감을주는 것이 좋습니다 :)
connectyourcharger

그것은 그들이 사이의 차이를 알 수 없기 때문에 정수 입력을 복용하여 출력 정수 이전의 도전에 잘했던 모든 언어가 잘 작동하지 않습니다 재미 -0.10.1
조 왕

답변:


15

엑셀, 13 바이트

=ROUNDUP(A1,)

대안

=EVEN(A1*2)/2

4
EVEN, 무슨 이상한 기능 ..
tsh

13
@ tsh 나는 당신이 "홀수 기능"을 의미한다고 생각합니다.
부정 7

2
@negativeseven 사용자 이름이 체크 아웃되었습니다. - P
Veky


8

젤리 , 4 바이트

ĊṠ¡Ḟ

정수를 생성하는 숫자를받는 모나 딕 링크.

온라인으로 사용해보십시오! 또는 테스트 스위트를 참조하십시오.

방법?

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

¡음수에 정확히 어떻게 작용합니까? 나는 그것이 문서화되지 않았다고 생각합니다
caird coinheringaahing

1
Jelly의 Wiki에는 문서화되어 있지 않지만 ¡반복적 인 성격은 for index in range(repetitions)코드 의 루프로 구현됩니다 . range([stop=]-1)이후 비어 start기본값 0step기본값 1과 "포지티브 단계, 범위의 내용은 r하기 식에 의해 결정된다 및 ." 문서r[i] = start + step*ii >= 0r[i] < stop
Jonathan Allan

¡의 행동은 파이썬의 행동에 의존 range하며range(-1).__iter__().__next__() 즉시 발생 StopIteration합니다.
관련이없는 문자열

6

파이썬 3 , 23 바이트

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

온라인으로 사용해보십시오!

xnor 덕분에 -1 바이트


1
(1|-(i>0))바이트를 절약 할 수 있습니다 (1,-1)[i>0].
xnor

@xnor 감사합니다!
Jitse

잘 했어. 나는 62 바이트 ಥ_ಥ에 그것을했다 :g=lambda r:0if r==0 else(int(r)+r/abs(r)if r/int(r)!=1 else r)
user14492

'|'는 무엇입니까 '-'앞에?
윌리엄

1
@ jaaq 저도 그 솔루션을 정말 좋아합니다! 내 초기 접근 방식은 24 바이트였습니다.
Jitse

5

젤리 , 5 4 바이트

AĊ×Ṡ

온라인으로 사용해보십시오!

이 포트 재귀 의 Stax 응답을 Jelly로 하므로 해당 설명을 확인하십시오.

덕분에 -1 바이트 Nick Kennedy

젤리 , 6 5 바이트

ĊḞ>?0

온라인으로 사용해보십시오!

덕분에 -1 바이트 Jonathan Allan

이것이 어떻게 작동 하는가

ĊḞ>?0 - Monadic link. Takes a float, x, as argument

   ?  - If:
  > 0 -   x > 0
      - Then:
Ċ     -   ceil(x)
      - Else:
 Ḟ    -   floor(x)

ĊḞ>?0당신의 6처럼 작동합니다.
Jonathan Allan

1
AĊ×Ṡ는 4이며 기능적으로 첫 번째 답변과 동일합니다.
Nick Kennedy

@NickKennedy과 요나단, 제안을 주셔서 감사합니다, 그들은에서 편집 된 한
coinheringaahing 케어 드

5

자바 (JDK) , 18 바이트

d->d.setScale(0,0)

온라인으로 사용해보십시오!

설명

BigDecimal입력 및 출력으로 사용합니다 . 숫자의 스케일을 설정 BigDecimal하는 방법 setScale이 있습니다. 첫 번째 매개 변수는 점 구분 기호 뒤의 자릿수이고 두 번째 매개 변수는 반올림 모드입니다. ROUND_UP"0에서 멀어짐"반올림이며 0그 값을 하드 코딩합니다.


5

Vim, 36 바이트 / 키 스트로크

:s/-/-<Space>
:g/\..*[1-9]/norm <C-v><C-a>lD
:s/<Space><cr>

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오!

설명:

: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)

사용 $F-a <esc>하는 대신 첫 번째 줄과와 매크로의 /대신에 조건부로 :g하고 :norm바이트 29 제공 tio.run/##HczBCoJAFEZhWva/QpuLCNbizoxalBXRInqJMpjGCYVwmkx7/...
Kritixi LITHOS


4

C # (Visual C # 컴파일러) , 41 바이트 27 바이트 24 바이트

s=>(int)s+Math.Sign(s%1)

온라인으로 사용해보십시오!

여기에 첫 번째 게시물, 재미가 있었으면 좋겠다. 여기 C # 장소가 비어 있다고 느꼈습니다.

-14 tnx ~ @expired data
-3 tnx ~ @ night2


1
사이트에 오신 것을 환영합니다. 코드 골프를 즐기시기 바랍니다!
caird coinheringaahing

27 바이트 ... 아마 약간의 저장
만료 된 데이터

@Expired, 그렇습니다. 이런 종류의 코딩은 언뜻보기에는 너무 이상했습니다. 라이브러리 전체를 잊어 버린
것처럼 보였습니다

1
@ Night2, 의견에 대한 tnx, 전체 답변을 입력하지 않았고 Code golf submission기능을 사용 했습니다. 끝에 약간의 내 자신의 단어를 추가했지만 편집을 위해 해당 코드 줄을 변경했으며 바로 거기에서 잊어 버렸습니다. 링크를 업데이트하여 첫 번째 단계로 돌아가서 한 번만 수정하십시오. 어쨌든, tnx 힌트를 얻기 위해 tnx
hessam hedieh

1
24 바이트 버전에 대한 TIO 링크를 편집했지만 코드 라인 자체는 여전히 27 바이트 버전입니다.
가치 잉크

4

룬 마법 , 18 16 바이트

1µ-i:'-A{*+'.A@

온라인으로 사용해보십시오!

"추가"(0에서 멀어짐) 0.999999 및 결과를 바닥 µ언어 연산자에서 무한에 가장 가까운 것입니다. 제대로 작동하는 Trunc(x)명령으로 응답이 0입력으로 지원 됩니다.


1
@JoKing Oof. 잘 잡았습니다. divide by input입력 값의 "부호"를 얻기 위해 a 를 수행하고 있습니다. 물론 입력이 0 일 때 0으로 나눕니다. 현재 그 주위에 (좋은) 방법은 없습니다. 이 커밋이 먼저 필요 합니다 . 나는 데니스를 찌를 것이다 (부수적 인 이점, 대답은 더 짧아 질 것이다).
Draco18s

1
@JoKing Answer가 이제 0올바르게 처리 됩니다.
Draco18s

3

Stax , 6 바이트

å├╪∙Bß

실행 및 디버깅

순서:

  1. 절대 값
  2. 천장
  3. 원래 부호로 곱하기

내가 사용하는 도구는 이것이 14 바이트라고 말합니다
Gust van de Wal

도구는 아마도 stax 문자 인코딩을 인식하지 못합니다 . 여전히 확실하지 않은 경우 "도구"섹션에 소스 파일을 실제로 다운로드하고 크기를 직접 확인할 수있는 다운로드 링크가 있습니다.
재귀


2

레티 나 0.8.2 , 38 바이트

\.0+
.
\b9+\..
0$&
T`9d`d`.9*\..
\..*

온라인으로 사용해보십시오! 링크에는 테스트 사례가 포함됩니다. 설명:

\.0+
.

숫자가 정수가 아닌지 확인하기 위해 소수점 다음에 0을 삭제하십시오. 소수점 다음에 숫자가 없으면 다음 두 개의 일치가 실패합니다.

\b9+\..
0$&

정수 부분이 모두 9s이면 0증분이 오버플로되도록 접두사 a 를 붙 입니다.

T`9d`d`.9*\..

숫자의 정수 부분을 증가시킵니다.

\..*

숫자의 소수 부분을 삭제하십시오.



2

자바 스크립트 (ES6), 20 바이트

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

온라인으로 사용해보십시오!

댓글

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

n=>(~~n-n%1)%1+n내 코드가 -1과 1 사이의 숫자에서 작동하지 않는다는 것을 알 때까지 16 바이트 답변 ( )에 대한 답변 을 작성했습니다. 마지막 3 바이 트로이 작업을 수행하는 방법을 알 수 있습니다 왼쪽!
Gust van de Wal


2

MathGolf , 5 바이트

‼σ±ü*

온라인으로 사용해보십시오!

설명

운영자의 사용법을 찾는 것이 좋습니다 .

‼       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

2

PHP , 30 바이트

<?=0^$argn-=0<=>fmod($argn,1);

온라인으로 사용해보십시오!

숫자가 정수가 아닌 경우 부호 -1 (음수 10 진수) 또는 1 (양수 10 진수)을 기준으로 새 숫자의 정수 부분이 인쇄됩니다.


PHP , 32 바이트

<?=[ceil,floor][$argn<0]($argn);

온라인으로 사용해보십시오!

기본적으로 floor입력이 0보다 작 으면 입력을 출력 ceil합니다.


PHP , 34 바이트

<?=($argn>0?:-1)*ceil(abs($argn));

온라인으로 사용해보십시오!





1

APL (Dyalog Unicode) , 15 바이트

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

온라인으로 사용해보십시오!

간단한 Dfn. 용도⎕IO←0 .

방법:

{⍎'⌈⌊'[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

sed, 131 바이트 + -r플래그의 경우 2 바이트

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

언 골프

#!/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/\..*$//


1

자바 스크립트 (node.js), 30 23 21 바이트

s=>~~s+Math.sign(s%1)

C # 답변에서 영감을 얻었습니다.

-7 바이트의 @Value Ink와 @Gust van de Wal에게 감사합니다!

또 다른 -2 바이트를 위해 @Gust van de Wal에게 다시 한번 감사드립니다!


이 경우 트릭을 +=언제 사용 +합니까? -1 바이트
가치 잉크

대신에 parseInt(), 난 그냥 사용하는 거라고 ~~시작 또는 같은 다른 비트 연산자에 |0또는 ^0바이트의 또 다른 덩어리 저장 끝
돌풍 밴 드 월마트

와우 @ValueInk, 나는 내가 쓴 이유를 아무 생각이 없다 +=그것을 지적에 대해 들으
궁수 자리

외부 괄호를 삭제할 수 있습니다
Gust van de Wal

@GustvandeWal 아, 나는 그것을 몰랐다! 감사
궁수 자리


0

자바 (OpenJDK 8) , 43 바이트

a->{return(int)((int)a/a<1?a>0?a+1:a-1:a);}

온라인으로 사용해보십시오!


3
람다 함수는 명시적인 return명령문 을 사용하지 않고 작성할 수 있습니다 .
요엘

@Joel이 옳습니다. 그리고 당신은 4 개의 추가 바이트가 변경 저장할 수 (int)a/a<1a%1!=0: 30 바이트
케빈 Cruijssen

도 있습니다 BigDecimal.setScale와 같은 우수한 결과를 제공하는 방법 내 대답이 증명은
올리비에 그레 구 아르




당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.