14

Pythonで浮動小数点数に「1」を追加する簡単で直接的な方法はありますか?

私はこれを意味します:

if a == 0.0143:
    a = plus(a)
    assert a == 0.0144

def plus(a):
    sa = str(a)
    index = sa.find('.')
    if index<0:
        return a+1
    else:
        sb = '0'*len(sa)
        sb[index] = '.'
        sb[-1] = 1
        return a+float(sb)

0.0144000000001 が得られるため、これは私が望むものではありません。

4

3 に答える 3

2

Blender の答えは間違いなく良い答えですが、使用floatsを主張する場合、これを行う簡単な方法は次のとおりだと思います。

  1. 10 ** xfloat を整数に乗算できるx を見つけます。

  2. 拡大した数に1を加えます。

  3. 以前の乗数を割ります。

したがって、次のようになります。

n = 0.125
e = len(str(n)) - 2
temp_n = n * 10 ** e
temp_n += 1
n = temp_n / 10 ** e
print n

編集:

前のスクリプトでは、数値が非常に長い場合に問題が発生しました。str()結果はandによって切り捨てられるprintため、スクリプトを少し変更しました。

n = 0.1259287345982795
e = len(repr(n)) - 2
temp_n = n * 10 ** e
temp_n += 1
n = temp_n / 10 ** e
print repr(n)
于 2013-08-07T02:05:23.090 に答える
0
n = n + 1/10**(len(repr(n)) - 2)
于 2013-08-07T02:31:23.577 に答える