小数模

2024-05-14 12:59:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力理解这段代码的模数部分

我试图只在模为0时打印num,也就是说它是偶数。 若我把数字设为100,速率设为1.5,我会得到结果。但是,如果我将rate值更改为.25.5.75以外的任何值,则不会返回任何结果

这里有一个例子:如果我使用100作为数字,1.4作为速率,我应该得到7.14.21等返回值,因为1.4平均地进入这些数字。但是,它不输出

最初的搜索告诉我模数对小数不起作用,但它对.5增量起作用

非常感谢您的任何意见

def findnum(number, rate): 
    for num in range(pinumber):
        if num %(rate) == 0:
            if num != 0:                 
                print(num)

Tags: 代码ifrate速率def数字增量num
3条回答

对浮点数的操作不精确。因此7 % 1.4不会给出精确的0,而是一个接近0的数字。如果在代码中用{}之类的东西替换{},其中{}是一个小的正数(例如,{}),它在大多数情况下都应该可以工作。但是,这仍然会为某些值带来不正确的结果(例如{}和{}),因为Python可能高估了{}的值,然后{}将计算为接近rate而不是0。因此,更安全的解决方案是使用abs(num/rate - round(num/rate)) < tolerance等条件

由于python中的十进制精度,7%1.4不能精确地给出0

因此,一种方法是使用标准数学库中的“isclose”函数来补偿十进制精度

if isclose(num % rate, abs_tol=1e-9):
    ...

或者,您可以使用十进制库,它提供了更好的精度,但需要字符串转换

当使用十进制数时,总是存在精度误差的问题。这意味着7 % 1.4不是0,而是4.440892098500626e-16,要使代码正常工作,必须使用decimal模块,该模块将数字存储为字符串

from decimal import Decimal
def findnum(number, rate): 
    for num in range(number):
        if num % Decimal(str(rate)) == 0:
            if num != 0:                 
                print(num)

相关问题 更多 >

    热门问题