ゼロのように丸く


12

ゴール

入力番号が与えられたら、1桁の有効数字で最も近い数値に丸めます。

必要条件

入力

  • 浮動小数点数。
  • 入力数がデータ型の制限内の出力になると仮定します(つまり、オーバーフローエラーを無視します)。
  • 0は無効な入力です。
  • 浮動小数点データ型で正確に表現できない(たとえば"0.35"、として保存されている0.3499999)数値はサポートする必要はありません。

出力

  • 1つの非ゼロ数字と任意の数のゼロ数字で構成される最も近い数字。
  • 結果は負数と小数をサポートする必要があります。
  • 入力が2つの可能な出力の間に正確にある場合、ゼロから切り上げます。

プレゼンテーション

プレゼンテーションではなく計算に重点が置かれています。出力は浮動小数点データ型である場合があります。これは、完全な表記または科学表記のテキストのいずれかです。特定の方法を提示することでバイト数が減少する抜け穴が見つかった場合は、称賛に値します!

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

得点

1週間後のバイトカウントが最小のコードが優先されます。


3
「1つの重要な数字」はあなたが探しているフレーズだと思います。
スティーブベネット

2
0の丸め規則はかなり奇妙です。
xnor

2
@xnor、あなたは正しい。0は1よりも0.0001に近い値です。0は単に無効であるはずです。
ハンドEフード

1
ええ、それは目標ステートメントと一致しません。
スティーブベネット

回答:


6

MATL、3バイト

1&V

オンラインでお試しください!または、すべてのテストケースを確認します

テストケース 0.25TIOのOctaveで実行されているコンパイラの失敗しますが、WindowsのMatlabでは動作します。

enter image description here

異なる動作は、Octave / Matlabの sprintf、プラットフォームに応じて、「バンカーの丸め」または「ゼロから0.5 詳細とテストについては、こちらをご覧ください


にとって 6バイト

1t3$Yo

OctaveとMatlabの両方で動作します。すべてのテストケースを確認します


1
「バンカーの丸め」は、私がゼリーの答えを削除した理由です。> _ <
アウトゴルファーのエリック

@EriktheOutgolferはい、それも理由だとわかりました。私は、MATLABが:-Dことを行っていないことを幸運だ
ルイスMendo


9

Javascript、19バイト

x=>x.toPrecision(1)

これは、上の仕様を満たしていません025
アンデルスカセオルグ

面白い。の仕様は0私には意味がありません。しかし、0.35事は... Javascriptが丸めのバイアスを避けようとしているように見えますが、仕様はバイアスを望んでいます。
スティーブベネット

ねえ、あなたはあなたのコメントを変えました-あなたは前に書き0.35ませんでした25。私はそれが25の仕様を満たしていると思います-それは私にとって正しいように見える「3e + 1」を返します。
スティーブベネット

申し訳ありませんが、正確な浮動小数点表現がない0.35ため、変更しました0.35。動作はブラウザに依存する必要があります。私が手252e+1Firefoxで。
アンデルスカセオルグ

うん、ChromeとFirefoxでこれら2つの異なる結果が得られます。ワオ。
スティーブベネット

4

網膜63 62バイト

1`[1-9]
$*#
#\.?[5-9]
#$&
T`d`0`#[\d.]+
0(\.?)#{10}
1$1
#+
$.0

オンラインでお試しください!


どうやら、末尾のゼロを心配する必要はないので、最後のステージを完全に削除できます(私はそれに感心しましたが、4文字のスペースに3つの疑問符が毎日表示されるわけではありません)。
ニール

残念ながら、この答えはに失敗するようです0.99
ニール

また、0.099などのために失敗します。修正の私の試み:オンラインで試してみてください!
ニール

また失敗したため99.99100.001...
ニール

0.099申し訳ありませんが、まだ間違っています。明るい面では、3行目+以降を削除できると思います;
ニール

2

PHP、45バイト

<?=round($x=$argv[1],-floor(log10(abs($x))));

オンラインでお試しください!

私のPython 2の答えと同じ方法。

また、正しく処理しているようです0.35。これにより、JSの回答の上のペグにもなります:D


興味深いことに、削除したPython 3の回答はPython 2でも機能する可能性があると思います。
Anders Kaseorg

テスト済みです。今すぐpythonの回答を編集および削除し
ません

2

T-SQL、27バイト

SELECT FORMAT(i,'G1')FROM t

Carlos AlejoのC#answerと同じ.Netフォーマットコードを使用します。入力は、既存のテーブルtのフロートiからです。私たちのIO規格ごとに

テストケース:

Input         Output
------------ --------
1             1
10            1E+01
17            2E+01
99            1E+02
54321         5E+04
56789         6E+04
-123         -1E+02
-789         -8E+02
0.23          0.2
0.25          0.3
-0.25        -0.3
4.56E+23      5E+23
4.56E-23      5E-23

(これらすべての値を入力テーブルにプリロードして、それらを一度に実行できることは非常に便利です。)


1

Python 2、62バイト

lambda x:round(x,-int(floor(log10(abs(x)))))
from math import*

オンラインでお試しください!

Pythonゴルフには慣れていませんが、これは機能します。

0.35浮動小数点の不正確さが原因で失敗します。

これがPython 2で正しく機能することを指摘してくれたAnders Kaseorgに感謝します。


の出力0.25はになるはず0.3です。
アンダースカセオルグ

@AndersKaseorg理由はわかりませんが、Javascriptの答えと同じ浮動小数点の不正確さが原因だと推測できます。
Skidsdev

うーん、待機25にも同じ問題があります...変です。
Skidsdev

Python 2 roundはゼロから離れ、Python 3は偶数に丸められるので、これはPy2で動作しますが3では動作しません。
flornquake

log(x,10)代わりにを使用して数バイトゴルフできますlog10(abs(x))
アリックスアイゼンハルト


1

Excel、14バイト

=ROUNDUP(A1,1)

サイトへようこそ!これは素晴らしい最初の回答です。他のユーザーがExcelをダウンロードする必要がないように、できればオンラインでテストできる場所へのリンクがありますか?
ケアニコインヘリング

残念ながら、ライセンスのために無料のMicrosoftサイトはないと思います。申し訳ありません。Code Golfで他のExcelの回答を見たことがありますが、私は新しいのでそれらがどのように検証されるのかわかりません!
14:17に作成

ほとんどのテストケースでは機能しません。「10分の1」の位置に切り上げます。最も重要な位置が何であれ(切り上げではなく)切り上げる必要があります。
Hand-E-Food



0

Forth(gforth)、24バイト

: f 1 set-precision f. ;

オンラインでお試しください!

入力は浮動小数点スタックで期待されています。出力は標準出力へ

浮動小数点出力関数のグローバル(この場合)の精度を変更するのは好きではありませんが、最後の前の値を復元する必要がないため、多くのバイトを節約できます。入力に関係なく、工学表記または科学表記で出力しません。

注:何らかの理由で、tioインタープリターはに変換さ0.250.2ますが、私のローカルインストールはに変換さ0.250.3ます。これがなぜなのか完全にはわかりませんが、ローカルで正しい結果が得られるので、答えをそのまま残しています

: f                   \ start a new word definition
  1 set-precision     \ set the floating point output words to use 1 significant digit
  f.                  \ output the top of the floating point stack
;                     \ end the word definition
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.