Cel
Podaną liczbę wejściową zaokrąglić do najbliższej liczby jedną znaczącą cyfrą.
Wymagania
Wejście
- Liczba zmiennoprzecinkowa.
- Załóżmy, że liczba wejściowa powoduje, że dane wyjściowe mieszczą się w granicach typu danych (tj. Zignoruj błędy przepełnienia).
- 0 jest nieprawidłowym wejściem.
- Liczby, których nie można dokładnie przedstawić w zmiennoprzecinkowym typie danych (np.
"0.35"
Przechowywane jako0.3499999
), nie muszą być obsługiwane.
Wynik
- Najbliższa liczba składająca się z jednej niezerowej cyfry i dowolnej liczby cyfr zerowych.
- Wynik musi obsługiwać liczby ujemne i liczby ułamkowe.
- Gdy wejście leży dokładnie pomiędzy dwoma możliwymi wyjściami, zaokrąglić od zera.
Prezentacja
Nacisk kładziony jest na obliczenia, a nie na prezentację. Dane wyjściowe mogą być typu danych zmiennoprzecinkowych. Może to być tekst w całości lub w notacji naukowej. Jeśli znajdziesz lukę, w której przedstawienie określonego sposobu zmniejsza liczbę bajtów, pochwały dla Ciebie!
Przykłady
9
-3000
.2
0.2
-.2
7e12
5e-15
1e0
Przypadki testowe
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
Punktacja
Wygrywa kod z najmniejszą liczbą bajtów po tygodniu.
Odpowiedzi:
MATL , 3 bajty
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Przypadek testowy
0.25
kończy się niepowodzeniem dla kompilatora działającego w Octave na TIO, ale działa w Matlab w systemie Windows:Odmienne zachowanie jest spowodowane przez
sprintf
funkcję Octave / Matlab, która używa albo „zaokrąglania bankiera”, albo „0,5 od zera”, w zależności od platformy. Więcej informacji i testów można znaleźć tutaj .Do 6 bajtów ,
działa zarówno na Octave, jak i na Matlabie. Sprawdź wszystkie przypadki testowe .
źródło
C # (.NET Core) , 19 bajtów
Wypróbuj online!
Przykłady:
źródło
JavaScript, 19 bajtów
źródło
0
lub25
.0
nie ma dla mnie sensu. Ale0.35
rzecz ... wygląda na to, że JavaScript próbuje uniknąć stronniczości w zaokrąglaniu, ale specyfikacja chce stronniczości.0.35
nie25
wcześniej. Myślę, że spełnia specyfikację dla 25 - zwraca „3e + 1”, co wydaje mi się właściwe.0.35
ponieważ0.35
nie ma dokładnej reprezentacji zmiennoprzecinkowej. Zachowanie musi być zależne od przeglądarki; Dostaję25
↦2e+1
w Firefoksie.Siatkówka ,
6362 bajtyWypróbuj online!
źródło
0.99
.0.099
itp. Moja próba naprawy: Wypróbuj online!99.99
,100.001
...0.099
, przepraszam. Z drugiej strony myślę, że można usunąć+
po;
trzeciej linii.PHP , 45 bajtów
Wypróbuj online!
Ta sama metoda, co moja odpowiedź na python 2.
Wydaje się również poprawnie obsługiwać
0.35
, co powoduje, że jest to również kołek powyżej odpowiedzi JS: Dźródło
T-SQL, 27 bajtów
Korzystanie z tego samego kodu formatującego .Net, co odpowiedź C # Carlosa Alejo . Dane wejściowe pochodzą z pływającej kolumny i w istniejącej tabeli t , zgodnie z naszymi standardami we / wy
Przypadki testowe:
(Bardzo przydatne, że mogę wstępnie załadować tabelę wejściową z tymi wszystkimi wartościami i uruchomić je jednocześnie).
źródło
Python 2 , 62 bajty
Wypróbuj online!
Nie jest używany do gry w golfa w Pythonie, ale to działa.
Nie działa z
0.35
powodu niedokładności zmiennoprzecinkowych.Podziękowania dla Andersa Kaseorga za zwrócenie uwagi, że działa to poprawnie w Pythonie 2
źródło
0.25
powinny być0.3
.round
zaokrągla od zera, podczas gdy Python 3 zaokrągla do parzystej, dlatego działa to w Py2, ale nie 3.log(x,10)
zamiastlog10(abs(x))
.Guile , 23 bajty
Wypróbuj online!
źródło
Excel, 14 bajtów
źródło
Perl 5 , 15 bajtów
Wypróbuj online!
źródło
Zsh , 14 bajtów
Port odpowiedzi perla. Wypróbuj online!
źródło
Dalej (gforth) , 24 bajty
Wypróbuj online!
Dane wejściowe są oczekiwane na stosie zmiennoprzecinkowym. Wyjście jest na standardowe wyjście
Nie lubię wprowadzać zmian w globalnej (w tym przypadku) precyzji funkcji wyjściowych zmiennoprzecinkowych, ale oszczędza wiele bajtów, aby nie musieć przywracać poprzedniej wartości na końcu. Nie generuje w notacji inżynierskiej ani naukowej, niezależnie od danych wejściowych.
Uwaga: Z jakiegoś powodu interpreter tio konwertuje
0.25
na0.2
, podczas gdy moja instalacja lokalna konwertuje0.25
na0.3
. Nie jestem do końca pewien, dlaczego tak jest, ale ponieważ otrzymuję poprawny wynik lokalnie, zostawiam swoją odpowiedź taką, jaka jestźródło