提问人:AlephZHR0 提问时间:6/13/2023 最后编辑:TylerHAlephZHR0 更新时间:10/11/2023 访问量:39
Python 中模运算和负浮点数的奇怪行为
Strange Behaviour with Modulo Operation and Negative Floating Point Numbers in Python
问:
负数的 mod 操作未按预期工作。
我试图获取一个数字的浮点部分,我曾经得到它,一直在工作,直到它是负数,当负数时,它以一种奇怪的方式工作,只有在运行时,当我在终端上测试它时,两个符号(+或-)都按预期工作,但是当进入程序时,它工作错误, 我看到有人在谈论整数,并建议使用 ,但没有奏效,无论哪种方式我都遇到了同样的问题。num % 1
num % 1.0
工作不正常,它正在返回但它应该返回(浮动部分)time_difference_minutes % 1
0.7142857142857126
0.285714285714287
奇怪的是,当我直接在提示中执行此操作时,它起作用了,而不是我在新文件上再次做了这个片段并起作用了,我得到了预期的,但是一旦我添加了“-”信号,它又开始发生,但每次输出都是一样的,我注意到它每次出错,而且我没有找到任何具体的解释, 我注意到的另一点是它在带有“-”信号的终端上工作,就在程序运行时,它返回错误。print(4.285714285714287 % 1)
我使用 abs() 来解决问题,但我真的很想了解这里出了什么问题。
代码示例:
# Constants
AVENUE_LENGTH_KM = 22.5
OLD_SPEED_KMH = 70
NEW_SPEED_KMH = 90
# Calculations
time_taken_old_speed_hours = AVENUE_LENGTH_KM / OLD_SPEED_KMH
time_taken_new_speed_hours = AVENUE_LENGTH_KM / NEW_SPEED_KMH
time_difference_hours = time_taken_new_speed_hours - time_taken_old_speed_hours
time_difference_minutes = time_difference_hours * 60
time_difference_seconds = time_difference_minutes * 60
# Output
print("{:.2f} hours".format(time_difference_hours))
print("{:.0f} minutes and {:.0f} seconds".format(
time_difference_minutes, (time_difference_minutes % 1) * 60))
print("{:.0f} seconds".format(time_difference_seconds))
答:
0赞
Mark Ransom
6/13/2023
#1
Python 始终保持以下关系: .由于地板除法向下舍入为负数,因此模量会进行调整以补偿。a//b * b + a%b == a
评论
%
fmod()
time_difference_minutes
-4.285714285714287 % 1