Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Python Decimal是否以某个值结尾_Python_Decimal - Fatal编程技术网

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