3

次のような同様の投稿は私の質問に答えません。 Pythonで文字列を10進数の整数に変換する

次のPythonコードについて考えてみます。

>>> import decimal
>>> s = '23.456'
>>> d = decimal.Decimal(s)
>>> d
Decimal('23.456')           # How do I represent this as simply 23.456?
>>> d - 1
22                          # How do I obtain the output to be 22.456?

文字列を10進数に変換して、その文字列に対して算術関数を実行し、正しい精度で出力を取得するにはどうすればよいですか?

4

7 に答える 7

3

数字を維持したい場合decimal、最も安全なのはすべてを変換することです。

>>> s = '23.456'
>>> d = decimal.Decimal(s)

>>> d - decimal.Decimal('1')
Decimal('22.456')
>>> d - decimal.Decimal('1.0')
Decimal('22.456')

Python 2.7では、整数の暗黙的な変換がありますが、浮動小数点数はありません。

>>> d - 1
Decimal('22.456')
>>> d - 1.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'Decimal' and 'float'
于 2012-06-10T19:17:25.350 に答える
1

計算にDecimal必要ですか?10進固定小数点と浮動小数点の算術ドキュメントでは、それらの違いについて概説しています。そうでなければ、あなたはただすることができます

 d = float('23.456')
 d
 23.456

 d - 1
 22.456

奇妙なことDecimalに、私はこれをインタラクティブに取得します

d = decimal.Decimal('23.456')

d
Decimal('23.456')
d - 1
Decimal('22.456')

しかし、それを印刷すると、値が得られます

print d
23.456
print d-1
22.456
于 2012-06-10T19:00:24.903 に答える
0

bultinfloat関数を使用します。

>>> d = float('23.456')
>>> d
23.456
>>> d - 1
22.456

こちらのドキュメントを参照してください:http://docs.python.org/library/functions.html#float

于 2012-06-10T19:00:00.593 に答える
0

私のPythonはそれを違ったやり方でしているようです:

>>> s = '23.456'
>>> d = decimal.Decimal(s)
>>> d
Decimal('23.456')
>>> d-1
Decimal('22.456')

使用しているバージョン/OSは何ですか?

于 2012-06-10T19:09:57.870 に答える
0

特にDecimal任意精度ライブラリを使用しようとしていますか、それとも文字列をPython浮動小数点に変換するのに苦労していますか?

Decimalを使用しようとしている場合:

>>> import decimal
>>> s1='23.456'
>>> s2='1.0'
>>> decimal.Decimal(s1) - decimal.Decimal(s2)
Decimal('22.456')
>>> s1='23.456'
>>> s2='1'
>>> decimal.Decimal(s1) - decimal.Decimal(s2)
Decimal('22.456')

または、私が思うに、文字列をPython浮動小数点値に変換しようとしているだけです。

>>> s1='23.456'
>>> s2='1'
>>> float(s1)-float(s2)
22.456
>>> float(s1)-1
22.456
>>> float(s1)-1.0
22.456
于 2012-06-10T20:14:18.660 に答える
0

floatを使用している場合、数値が大きくなりすぎると(たとえば、x = 29345678.91)、予期しない結果が得られます。この場合、float(x)2.934567891E7になります。これは、特に財務数値を処理する場合は望ましくないようです。

于 2013-03-01T17:47:47.253 に答える
0

Pythonでは、値の文字列をfloatに変換するには、次のようにします。

num = "29.0"
print (float(num))

文字列を10進数に変換するには

from decimal import Decimal
num = "29.0"
print (Decimal(num))
于 2021-11-07T07:50:01.993 に答える