2

私が探しているのは、できれば簡単な方法で、数値の最下位桁 (浮動小数点または整数) を見つけることです。

例えば:

101 --> 1

101.2 --> 0.2

1.1003 --> 0.0003

10、100、1000 などのケースは関連性がやや低くなりますが、いずれにしても興味があります。

形式は特に気にしないので、より実用的な方法で結果を特定する方が理にかなっている場合は、お気軽に。

例えば:

101.2 --> 0.1 または 10^-1 (または、関連する累乗/指数の場合は -1) で問題ありません。

追加のコンテキストについては、私がやろうとしていること:

数字 31.6 を 31.5 に変換できるようにしたいとしましょう (最下位桁を 1 減らします)。16 という数字を持っているとしましょう。それを 15 に変えたいと思います (同じ考えです)。数字が 100 の場合でも、それを 99 に変換したいのですが、おそらくそこでの処理を理解できます (100.0 を指定しなくても、1 が最下位桁であり、1 を減らすと 0 になりますが、これはそうではありません)。私が欲しいもの)。これは、データ範囲内のクラス ブレークを手動で操作することに関連しています (トピックからは外れますが)。

私の宿題を示す: これは有望に見えますが(leastSigDigit の部分)、数字の累乗への (数学的な) 参照なしで数字を返します (多くの文字列変換も避けたいと思っています)。

これは、 stackoverflow を検索したときに出てきたものですが、役に立たないようです (間違った用語/検索フレーズを使用している場合は、事前にお詫びします)。

4

1 に答える 1

7

すでにフロートがある場合、これは機能しません。Python float は、必要な情報を運びません。1.と の間に区別はなく、 aと a1.0を割ると(実際には であることを除いて)得られます。1.03.00.33333333333333330.333333333333333314829616256247390992939472198486328125

入力が文字列の場合は、非常に簡単に実行できます。

def least_significant_digit_power(num_string):
    if '.' in num_string:
        # There's a decimal point. Figure out how many digits are to the right
        # of the decimal point and negate that.
        return -len(num_string.partition('.')[2])
    else:
        # No decimal point. Count trailing zeros.
        return len(num_string) - len(num_string.rstrip('0'))
于 2014-08-29T15:32:18.363 に答える