最も近い10の倍数を求める

Round the number to its nearest base 10 number – StackOverflow

近さの定義が曖昧で,後で質問が変わっていそうなので,以下では「四捨五入」を考えている.
(100←499,500→1,000;本来,ユークリッド的な近さなら550がミッドポイント)

roundは四捨五入ではない.なので,roundを四捨五入だと思うと,うまくいかない.
log10で桁数を求めて,後は四捨五入(5より大きいか小さいか)するだけ.

これを応用すると,有効数字を求めたりできる(関連:Pythonで有効数字

from math import log10


def func(x):
    dp = int(log10(abs(x)))
    if x >= 5 * 10**dp:
        return f'{10**(dp + 1)}'
    else:
        return f'{10**(dp)}'


func(0.09), func(35), func(99), func(502), func(999), func(4655)

(‘0.1′, ’10’, ‘100’, ‘1000’, ‘1000’, ‘1000’)

広告
カテゴリー: 未分類 パーマリンク

最も近い10の倍数を求める への2件のフィードバック

  1. ピンバック: NumPy 1D配列で各値の最初の桁を取得したい | 粉末@それは風のように (日記)

  2. ピンバック: 浮動小数点演算に於ける誤差 | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中