3

类似的帖子,如以下不回答我的问题。 在 Python 中将字符串转换为带小数的整数

考虑以下 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?

如何将字符串转换为十进制数,以便能够对其执行算术函数并获得具有正确精度的输出?

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的计算需要吗?十进制定点和浮点算术文档概述了它们的区别。如果没有,你可以这样做

 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

我的 Python 似乎有不同的做法:

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

您使用的是什么版本/操作系统?

于 2012-06-10T19:09:57.870 回答
0

如果使用浮点数,当数字变得太大时——例如 x = 29345678.91——你会得到意想不到的结果。在这种情况下,float(x)变为2.934567891E7,这似乎是不可取的,尤其是在处理财务数字时。

于 2013-03-01T17:47:47.253 回答
0

使用 bultin float 函数:

>>> 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

您是专门尝试使用 Decimal 任意精度库,还是只是在努力将字符串转换为 Python 浮点数?

如果您尝试使用十进制:

>>> 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

在 python 中,要将值字符串转换为浮点数,只需执行以下操作:

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

将字符串转换为十进制

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