Pra*_*yot 12 python format decimal
我在Python中使用Decimal库,并使用值打印出值
format(value, 'f'),其中value是a Decimal.我在表单中得到数字10.00000,这反映了小数的精度.我知道float 支持is_integer,但似乎缺少类似的小数组API.我想知道是否有办法解决这个问题.
pok*_*oke 24
您可以使用模运算来检查是否存在非整数余数:
>>> from decimal import Decimal
>>> Decimal('3.14') % 1 == 0
False
>>> Decimal('3') % 1 == 0
True
>>> Decimal('3.0') % 1 == 0
True
Run Code Online (Sandbox Code Playgroud)
Dav*_*ave 13
从 Python 3.6 开始,Decimal有一个方法as_integer_ratio().
as_integer_ratio()返回一个(分子,分母)元组。如果分母为 1,则该值为整数。
>>> from decimal import Decimal
>>> Decimal("123.456").as_integer_ratio()[1] == 1
False
>>> Decimal("123.000").as_integer_ratio()[1] == 1
True
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试math.floor(val) == val或val == int(val)。
数学解决方案是将十进制数字转换为整数,然后测试其与数字的相等性。
由于Decimal可以具有任意精度,因此不应将其转换为int或float。
幸运的是,Decimal该类具有to_integral_value可以为您进行转换的。您可以采用以下解决方案:
def is_integer(d):
return d == d.to_integral_value()
Run Code Online (Sandbox Code Playgroud)
例:
from decimal import Decimal
d_int = Decimal(3)
assert is_integer(d_int)
d_float = Decimal(3.1415)
assert not is_integer(d_float)
Run Code Online (Sandbox Code Playgroud)
请参阅:http : //docs.python.org/2/library/decimal.html#decimal.Decimal.to_integral_value
| 归档时间: |
|
| 查看次数: |
16312 次 |
| 最近记录: |