在python中,如何在数字中保留小数位?

In python, how do I preserve decimal places in numbers?

本问题已经有最佳答案,请猛点这里访问。

我想在函数之间传递数字,同时保留数字的小数位。

我发现,如果我将类似"10.00"的浮点值传递给一个函数,那么小数位就不会被使用。这会破坏计算百分比之类的操作。

例如,x*(10/100)将始终返回0。但如果我设法保留小数点后的位置,我最终会得到x*(10.00/100)。这将返回准确的结果。

我希望有一种技术,当我处理小数点后可以保持零的数字时,它可以实现一致性。


当你写作时

1
10 / 100

您正在执行整数除法。这是因为两个操作数都是整数。结果是0

如果要执行浮点除法,请将其中一个操作数设为浮点值。例如:

1
10.0 / 100

1
float(10) / 100

也要注意

1
10.0 / 100

结果在二进制浮点值和二进制浮点数据类型中不能表示0.1的真实结果值。因此,如果要准确表示结果,可能需要使用十进制数据类型。decimal模块具有所需的功能。


您应该使用decimal模块。每个数字都知道它有多少个有效数字。


在划分两个整数时,python 2.x将使用整数除法,除非您明确地告诉它不要这样做。两个整数输入->一个整数输出。

python 3之后将返回,引用pep 238 http://www.python.org/dev/peps/pep-0238/对除法近似结果的合理近似值,即它将执行浮点除法,并返回结果而不取整。

要在早期版本的Python中启用此行为,可以使用:

1
from __future__ import division

在模块的最顶层,这应该可以得到您想要的一致的结果。


python中的division for floatint的工作方式不同,看看这个问题,它的答案是:python division。

此外,如果您正在寻找将数字的小数点格式化为字符串的解决方案,则可能需要使用%f

Python

1
2
3
4
5
6
7
8
# '1.000000'
"%f" % (1.0)

# '1.00'
"%.2f" % (1.0)

# '  1.00'
"%6.2f" % (1.0)

如果您试图保留有效数字,那么十进制模块就是您所需要的一切。例子:

1
2
3
4
5
6
>>> from decimal import Decimal
>>> num = Decimal('10.00')
>>> num
Decimal('10.00')
>>> num / 10
Decimal('1.00')