我想在函数之间传递数字,同时保留数字的小数位。
我发现如果我将一个像'10 .00'这样的浮点数传递给函数,那么小数位就不会被使用了。这会混淆像计算百分比这样的操作。
例如,x *(10/100)将始终返回0。 但如果我设法保留小数位,我最终会做x *(10.00 / 100)。这会返回准确的结果。
我希望有一种技术可以在我处理可以容纳零的小数位数时实现一致性。
答案 0 :(得分:3)
写作时
10 / 100
您正在执行整数除法。那是因为两个操作数都是整数。结果是0
。
如果要执行浮点除法,请将其中一个操作数设为浮点值。例如:
10.0 / 100
或
float(10) / 100
还要注意
10.0 / 100
导致二进制浮点值,二进制浮点数据类型不能表示0.1
的真实结果值。因此,如果要准确表示结果,可能需要使用十进制数据类型。 decimal
模块具有所需的功能。
答案 1 :(得分:2)
Python 2.x在划分两个整数时将使用整数除法,除非您明确告诉它不这样做。两个整数 - >一个整数。
Python 3以后将返回,引用PEP 238 http://www.python.org/dev/peps/pep-0238/合理逼近除法近似的结果,即它将执行浮点除法并返回结果而不进行舍入。
要在早期版本的Python中启用此行为,您可以使用:
from __future__ import division
在模块的最顶层,这可以为您提供所需的一致结果。
答案 2 :(得分:2)
您应该使用decimal
模块。每个数字都知道它有多少有效数字。
答案 3 :(得分:1)
如果您尝试保留有效数字,decimal模块将包含您需要的所有内容。例如:
>>> from decimal import Decimal
>>> num = Decimal('10.00')
>>> num
Decimal('10.00')
>>> num / 10
Decimal('1.00')
答案 4 :(得分:1)
float
和int
在python中的分工方式不同,请看一下这个问题及其答案:Python division。
此外,如果您正在寻找将数字的十进制浮点格式化为字符串的解决方案,则可能需要使用%f
。
<强>的Python 强>
# '1.000000'
"%f" % (1.0)
# '1.00'
"%.2f" % (1.0)
# ' 1.00'
"%6.2f" % (1.0)