检查Python Decimal是否以某个值结尾
我有一堆十进制对象。我想测试每一个,看看它是否以检查Python Decimal是否以某个值结尾,python,decimal,Python,Decimal,我有一堆十进制对象。我想测试每一个,看看它是否以.43结尾。我可以先将其转换为字符串: >>> num = Decimal('1.43') >>> str(num).endswith('.43') True 但是如果我不知道小数点是用什么精度创建的,那就失败了 >>> num = Decimal('1.4300') >>> str(num).endswith('.43') False 我可以进行字符串转换并检查它是否包含
.43
结尾。我可以先将其转换为字符串:
>>> num = Decimal('1.43')
>>> str(num).endswith('.43')
True
但是如果我不知道小数点是用什么精度创建的,那就失败了
>>> num = Decimal('1.4300')
>>> str(num).endswith('.43')
False
我可以进行字符串转换并检查它是否包含.43
>>> num = Decimal('1.4300')
>>> '.43' in str(num)
True
但这也与我不想要的其他值相匹配
>>> num = Decimal('1.4321')
>>> '.43' in str(num)
True
如何检查小数点是否以
.43
结尾,后面是否有任意数量的零?这里最好使用数学推理,避免浮点域(不准确)和字符串域(不必要)。如果从以.43
结尾的数字中减去0.43
,则应留下一个整数,您可以使用模运算符%
检查:
>>> point43 = Decimal("0.43")
>>> num = Decimal('1.43')
>>> (abs(num) - point43) % 1 == 0
True
您可以像这样利用模数运算符: (此处的模运算符将整数值去除。
32.48%1
变为0.48
。绝对值函数使其为正值。abs(-32.48)
将变为32.48
。谢谢@wim。)
您可以将其转换为字符串,然后在检查之前去掉尾随的0,如下所示
num = Decimal('1.4300')
print(str(num).rstrip('0').endswith('.43'))
#Prints True
你可以去掉你的一串零
>>> num = Decimal('1.4300')
>>> str(num).strip('0').endswith('.43')
True
对。我要去修那个。。。。我猜你的使用了他的自定义十进制类,而我的只是说不。嗯……我在python 3中尝试了模数运算符,对于1.340,它返回0.34000000001,因此与0.34相比,它失败了。你知道为什么吗?我不敢说这是“正确的”;比较两个
float
s是否相等对舍入误差很敏感@wim的答案确保了所有操作都继续在十进制值上进行。我认为我的答案很容易出现舍入点错误。那我再绕一圈:|相关的
>>> num = Decimal('1.4300')
>>> str(num).strip('0').endswith('.43')
True