首页 > 解决方案 > 检查范围的长度除以范围元素是否没有除余

问题描述

如果数组中的元素个数不是整数类型的数字,下面的代码将显示一个特定的注释。它适用于dr=0.5但不适用于dr=0.1因为print (4%0.1)返回0.09999999999999978而不是0.

如何更改代码以获取4%0.1==0

import math

limits_real=(-2,2)
dr=0.1

if (limits_real[1]-limits_real[0])%dr!=0:
    print ('Inapropriate limits or elements')

标签: pythonpython-3.xfloating-pointroundingdivision

解决方案


它适用于 dr=0.5 但不适用于 dr=0.1,因为 print (4%0.1) 返回 0.09999999999999978 而不是 0。

因为浮点数有每个程序员都应该知道的限制,请参阅: https ://docs.python.org/3/tutorial/floatingpoint.html

如上述文档末尾所示,您可以使用decimal模块,它工作得完全正确,但比普通浮点算法慢:

from decimal import Decimal

limits_real=(-2,2)
dr = Decimal("0.1")

if (limits_real[1] - limits_real[0]) % dr != 0:
    print ('Inapropriate limits or elements')

请注意,您应该使用strwhile 构造Decimal实例,不要使用float.


推荐阅读