Arrondir vers zéro

14

C'est une tâche simple. Étant donné un nombre réel positif ou négatif, arrondissez-le au prochain entier proche de zéro.

Le défi

  • Prenez la saisie sous toute forme raisonnable (stdin, fonction, etc.) d'un nombre réel positif ou négatif.

  • Arrondissez ce nombre "vers zéro" - cela signifie que s'il est positif, vous arrondirez vers le bas, et s'il est négatif, vous arrondirez vers le haut.

  • Renvoyez le numéro ou envoyez-le à la console.

Cas de test

 1.1   =>  1
-1.1   => -1
 500.4 =>  500
-283.5 => -283
 50    =>  50
-50    => -50

Règles

S'amuser! d'autres défis Jimmy à venir

Branchez votre chargeur
la source
3
Puis-je produire 3.00pour 3.14?
tsh
1
@A_ Si les messages d'erreur sont dans stderr. Et vos sorties sont en sortie standard. Il est autorisé par défaut.
tsh
1
Aussi 0.01et -0.01devrait céder 0...
roblogic
2
Hmm, cela semble déraisonnablement trivial pour un golf à code. La plupart des langs auront une fonction intégrée pour cela, non? Il semble que nous devons supposer que toutes les entrées et sorties sont des chaînes?
Octopus
2
3.00 est certainement un entier. Plus précisément, dans la notation mathématique standard ainsi que dans de nombreux langages de programmation, la notation "3.00" désigne le nombre 3, qui est un entier; mais dans de nombreux langages de programmation, cela indique que le nombre doit être stocké dans un format à virgule flottante. (Mais c'est un entier quel que soit le format dans lequel il est stocké.)
Tanner Swett

Réponses:

13

Gelée , 1 octet

r

Un programme complet (en tant que lien monadique, il renvoie une liste de longueur un).

Essayez-le en ligne!

Comment?

r - Main Link: number, X           e.g. -7.999
r - inclusive range between left (X) and right (X) (implicit cast to integer of inputs)
  -  = [int(X):int(X)] = [int(X)]       [-7]
  - implicit (smashing) print            -7
Jonathan Allan
la source
40

Python 3 , 3 octets

int

Essayez-le en ligne!

Tronque les chiffres après la virgule décimale.

REMARQUE: il s'agit d'une réponse triviale. Veuillez consulter les autres réponses avant de voter

MilkyWay90
la source
18
Cela démontre que Python 3 est plus populaire que Python 2.
1
Euh ... Pourquoi les votes positifs? C'est une réponse assez banale ...
MilkyWay90
Je pense que c'est votre excellente explication du code. :)
Chas Brown
3
@ChasBrown Je ne pense pas ... l'explication n'est même pas une explication standard de calibre.
MilkyWay90
Je suppose que @Chas souligne que l'explication est infiniment plus complète que la sienne.
prl
21

Python 2 , 3 octets

int

Essayez-le en ligne!

Chas Brown
la source
2
Désolé, mais je vous ai ninja ( codegolf.stackexchange.com/a/190673/83048 )
MilkyWay90
2
Arg! Mais vous utilisez Python 3 ... :)
Chas Brown
Certes, les gens devraient savoir que cela fonctionne aussi en Python 2
MilkyWay90
Malheureusement, vous avez été embobiné par environ une minute :(
connectyourcharger
3
J'ai volé! :)
Chas Brown
12

Perl 5 -p056l15 , 2 octets

<>

Essayez-le en ligne!

Comment ça marche?

-056   # (CLI) Make "." the input record separator
-l15   # (CLI) Make "\n" the output record separator
       # (otherwise it would use the input separator)
-p     # (CLI) Implicitly read $_ from STDIN
<>     # Read the second input field and do nothing with it
-p     # (CLI) Output $_ to STDOUT

Ou si vous préférez une réponse plus traditionnelle:

Perl 5 , 6 octets

$_=int

Essayez-le en ligne!

Xcali
la source
l15 n'est pas \n, c'est \r. \nserait l12. Il en va de même pour TIO.
Grimmy
pour la deuxième option, il y a aussi-Minteger -p $_/=1
Nahuel Fouilleul
4
La première solution est en fait 8 octets car vous devez inclure les indicateurs dans votre nombre d'octets
John Dvorak
2
@JohnDvorak selon le méta- codegolf.meta.stackexchange.com/questions/14337/… , les drapeaux n'ajoutent pas d'octets mais comptent comme une version différente de la langue.
Nick Kennedy
@NahuelFouilleul J'ai pensé à celui-là aussi, mais cela n'avait pas d'importance puisque je suis arrivé à 2 octets dans l'autre sens.
Xcali
6

Labyrinthe et hexagone , 3 octets

Merci à FryAmTheEggman d'avoir souligné que j'avais écrit de l'hexagonie!

?!@

Essayez-le en ligne! & Essayez-le en ligne!

Comment?

Labyrinth et Hexagony vous le diront tous les deux le plus tôt possible! ...

? - read and discard from STDIN until a digit, a - or a + is found. Then read as many characters as possible to form a valid (signed) decimal integer and push its value
! - pop a value and write its decimal representation to STDOUT
@ - exit the labyrinth
Jonathan Allan
la source
3
Cela peut être vrai pour certaines autres langues de Martin, mais le même programme fonctionne exactement dans Hexagony .
FryAmTheEggman
3
Hé, j'ai toujours voulu faire une réponse dans Hexagony. Le faire sans essayer était la dernière chose que je pensais pouvoir arriver!
Jonathan Allan
IO@dans Backhand fonctionne de la même manière, et &.@dans Befunge. Probablement beaucoup de langues avec entrée entière, et seule la gestion des entiers sera la même
Jo King
@JoKing Nous attendons donc que quelqu'un découvre une langue avec des E / S entières et lise également tous les nombres de stdin vers stack / list, puis les imprime sur stdout par défaut. Je pense qu'il pourrait y en avoir un, et ce serait une réponse en zéro octet.
tsh
@tsh très probablement!
Jonathan Allan
6

brainfuck , 26 octets

,[.+++++[->+++++<]>+[,>]<]

Essayez-le en ligne!

Sorties avec une fin .si le nombre était décimal

Il n'y a pas beaucoup de golf spéculaire, sauf qu'au lieu de soustraire 46 pour vérifier si un personnage est un ., j'ajoute 5 et je multiplie par 5 pour obtenir 255, puis j'en ajoute un de plus pour passer à zéro. Soustraire 3, multiplier par 6 et soustraire 2 équivaut au même nombre

Jo King
la source
6

C (tcc), 39 21 10 octets

J'étais en fait assez surpris que personne n'ait pensé à utiliser C.

f(float i){}

Ce n'est pas une fonction identitaire comme cela semble l'être. Le type int implicite de la fonction f ponctue le point flottant.

TIO

Moins susceptible de tromper les gens mais a une longueur d'octet plus courte:

f(int i){}

TIO


la source
Ne travaillez pas floatcar cela utilise un registre différent pour l'entrée des valeurs à virgule flottante.
Hauleth
4

J , 6 octets

**<.@|

Essayez-le en ligne!

Signe *multiplié par *l'arrondi <.de la valeur absolue@|

Jonas
la source
3

Java (OpenJDK 8) , 15 octets 9 octets

s->(int)s

Essayez-le en ligne!

merci à @ kevin-cruijssen

Margon
la source
9 octets en utilisant une interface lambda afin que nous puissions utiliser des primitives et une simple conversion en (int). Et voici une alternative amusante de 15 octets utilisant une référence de méthode. :)
Kevin Cruijssen
1
@KevinCruijssen merci d'avoir indiqué la réponse de 9 octets! Et les solutions alternatives de 15 octets sont géniales! Aussi grand fan de vos réponses! Je me suis aussi inspiré de rejoindre la communauté pour vos contributions: D
Margon
Heureux d'avoir pu aider et amusant d'entendre que je suis une inspiration. : D Bienvenue! Oh, et si vous ne les avez pas encore vus, des astuces pour jouer au golf en Java et des astuces pour jouer au golf dans <toutes les langues> pourraient être intéressantes à lire. Profitez de votre séjour! :)
Kevin Cruijssen
Je vous remercie! :) J'ai déjà lu tous les conseils et je me suis beaucoup caché avant de poster! J'espère pouvoir répondre davantage à l'avenir!
Margon
3

Excel, 10 octets

=TRUNC(A1)

TRUNC tronque un nombre en un entier en supprimant la partie fractionnaire du nombre.

Wernisch
la source
3

R , 13 5 octets

Merci Robin Ryder

trunc

Essayez-le en ligne!

Robert S.
la source
2
Il existe un consensus sur le fait qu'il est acceptable de répondre soit par une fonction soit par un programme complet. Ici, le formulaire de fonction ne fait que 5 octets .
Robin Ryder du
2

Ruby , 11 octets

proc &:to_i

J'ai choisi celui-ci car il se distingue des lambdas que nous, les golfeurs Ruby, utilisons généralement (heureusement, il avait le même nombre de bytec que la solution "traditionnelle"):

->n{n.to_i}

Essayez-le en ligne!

Encre de valeur
la source
2

ReRegex , 12 octets

\..+//#input

Essayez-le en ligne!

ReRegex est un langage de programmation qui correspond et remplace encore et encore jusqu'à ce qu'il n'y ait aucune correspondance.

MATCH
    \.                                      The literal period/full stop char
    .+                                      Followed by one or more characters
REPLACE
    (nothing)                               Equivalent to removing the input
STRING TO REPEATEDLY MATCH/REPLACE UNTIL THERE ARE NO MATCHES
    #input                                  The input
MilkyWay90
la source
2

JavaScript, 6 octets

x=>x^0

Essayez-le en ligne!


JavaScript, 8 bytes

L'utilisation de intégré est de 2 octets de plus ...

parseInt

Essayez-le en ligne!

tsh
la source
Also x=>~~x? Still 6 bytes though.
mherzig
2

Intel 8087 FPU machine code, 14 bytes

D9 2E 010C      FLDCW CW_RNDZ   ; modified CW register for round towards zero
D9 06 010E      FLD  A          ; load single precision value A into ST(0)
DF 16 0112      FIST B          ; store integer value of ST(0) into B

CW_RNDZ   DW    0F7FH           ; control word to round down

Input is single precision value in a memory location A (a DD), output is integer value at memory location B (a DW).

The 8087 must first be put into round towards zero mode by setting the control word (0F7FH). Then load the floating point value and store back to an integer.

640KB
la source
2

Keg, 19 17 13 bytes

This outputs some trailing unprintable characters. Also, this exits with an error. (Now we need reversed input!)

?'(:\.>')"([,

la source
Exiting with an error is allowed by default
EdgyNerd
2

Whitespace (with vii5ard compiler), 18 17 bytes

[S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve_input][T  N
S T _Print_as_integer]

Letters S (space), T (tab), and N (new-line) added as highlighting only.
[..._some_action] added as explanation only.

Try it online. You'll have to copy-paste the code yourself (note that SE converts the tabs to a bunch of spaces!) in order to run the code at the online Whitespace-compiler vii5ard. When clicking run, it will ask for an input (i.e. -285.5), and after clicking enter it will continue and output -283.

Explanation in pseudo-code:

Integer i = STDIN as integer
Print i as integer

Whitespace can only use I/O as integers or single characters, so in this case it would read the input as integer and ignore any other trailing characters. I.e. -283.5 or -283abc5 would both be input (and thus output) as -283.

Unfortunately this above doesn't work on TIO for two reasons (all Whitespace compilers are slightly different..):

  1. It will give a no parse error when we try to read an input as integer, which isn't an a valid integer. So, instead we'll read one character at a time, and stop (with an error) as soon as we've encountered the . or there is no more input (i.e. 50/-50).
  2. In the vii5ard compiler it's also possible to push 0 with just SSN, whereas on TIO it requires an additional S or T: SSSN/SSTN. The first S is Enable Stack Manipulation; the second S is Push what follows as integer; the third S/T is positive/negative respectively; and any S/T after that (followed by an N) is the number we want to push in binary, where S=0 and T=1. For integer 0 this binary part doesn't matter, since it's 0 by default. But on TIO we'd still have to specify the positive/negative, and with most other Whitespace compilers like vii5ard not.

Whitespace (with TIO compiler), 48 bytes

[N
S S N
_Create_Label_LOOP][S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   S _Read_STDIN_as_character][T   T   T   _Retrieve_input][S N
S _Duplicate_input][S S S T S T T   T   S N
_Push_46_.][T   S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_EXIT][T N
S S _Print_as_character][N
S N
N
_Jump_to_Label_LOOP]

Letters S (space), T (tab), and N (new-line) added as highlighting only.
[..._some_action] added as explanation only.

Try it online (with raw spaces, tabs and new-lines only).

Explanation in pseudo-code:

Start LOOP:
  Character c = STDIN as character
  If(c == '.'):
    Exit program
  Print c as character
  Go to the next iteration of LOOP
Kevin Cruijssen
la source
1

05AB1E, 1 byte

ï

In the legacy version (which is written in Python), the cast to integer builtin works as expected to truncate the decimal values.

Try it online.

In the new version of 05AB1E (written in Elixir) it only works on strings (even though integers/decimals/strings should all be interchangeable, unless sorting lexicographical vs numeric for example). Guess I can report a bug to @Adnan..

Try it online to compare integer/decimal input (giving incorrect result) vs string inputs (giving correct results).

Kevin Cruijssen
la source
1
ï works just fine on non-legacy 05AB1E. It's array input that works in a weird way.
Grimmy
@Grimy Ah, it's string vs integer/decimal. Strings work correct, but integers/decimals not.
Kevin Cruijssen
1

Aheui (esotope), 9 bytes

방망희

Try it online!

Basic idea from that of triangular answer (or any other languages takes numeric input as integer).

Fun fact. 방망희(pronounced bang-mang-heui(a of ark)) sounds almost same as 방망이(pronounced bang-mang-i(a of ark, i sounds like E), which means bat.

How does it works?

takes number as integer.

prints value as number.

terminates program.

LegenDUST
la source
1

PowerShell, 19 bytes

$args-replace'\..*'

Try it online!

PowerShell by default does bankers' rounding, which is pretty much the opposite of how many other languages do rounding. So, traditionally we'd use [Math]::Truncate() to strip the decimal point and any decimal part and achieve the "to zero" rounding we're interested in here. However, that's a bit long, so using this tip, we can round-toward-zero by implicitly casting the input to a string, performing a regex -replace to get rid of the period and anything after it, and leaving the output on the pipeline for implicit printing.

AdmBorkBork
la source
I don't think this would give the desired result for negative numbers.
Octopus
@Octopus Sure it does? It just trims off the decimal portion, which moves the number toward zero whether from positive or negative floats.
AdmBorkBork
Right, duh. Lol.
Octopus
1

Triangular, 3 bytes

$.%

Try it online!

Triangular takes numeric input as an integer; any decimal values are truncated. If it's acceptable to just leave the input on the stack without printing it, then this solution can instead be:


Triangular, 1 byte

$

Try it online!

Reinstate Monica
la source