我正在做一个数学解题程序,它一直把整数打印成小数。比如1是1.0,5是5.0,我的代码是:
print("Type in the cooridinates of the two points.")
print("")
print("---------------------")
print("First point:")
x1 = int(input("X: "))
y1 = int(input("Y: "))
print("")
print("---------------------")
print("Second point:")
x2 = int(input("X: "))
y2 = int(input("Y: "))
m = (y1-y2) / (x1-x2)
b = y1 - m * x1
round(m, 0)
round(b, 0)
print("Completed equation:")
print("")
if b < 0:
print("Y = "+ str(m) +"X - "+ str(b) +".")
elif b > 0:
print("Y = "+ str(m) +"X + "+ str(b) +".")
elif b == 0:
print("Y = "+ str(m) +"X.")
input("Press enter to continue.")
当您这样做时:
你得到的是浮点(实数的浮点表示),而不是int(整数)。
然后,因为
m
是一个浮点数,b
也是一个浮点数。然后,当您在浮点上调用str
时,会得到一个小数点。正确的解决方法取决于你真正想做什么。
如果只想处理整数,可以使用整数除法:
也就是说,如果
x1, x2, y1, y2 = 4, 2, 2, 1
你最终会得到b = 2
(2 - 0 * 4
)。我怀疑这不是你想要的;你实际上想把这个4
乘以1/2
,然后再把结果四舍五入。在这种情况下,您可以在相同的位置进行转换:
请注意,您对
round
的现有调用实际上没有任何作用;round(m, 0)
不会修改m
,它返回一个新值,该值是m
的舍入版本,您必须将其分配回m
(或其他位置)。还有一件事需要考虑:您可能真的需要一半,而不是“最接近0.5的浮点表示”。
你可能并不真正关心差异,除非你使用的是非常大的整数,否则舍入误差将永远不可见。但是如果您确实需要注意,您可能需要考虑使用第三方精确分数模块(例如
clnum
),或者可能使用标准库decimal
。这意味着你必须更加明确,所以除非你认为有必要,否则我不会这么做。但如果有必要的话,它会像这样:最后,您可以始终将数字保持为
float
s(或Decimal
s等),而不舍入或转换它们,并强制它们以整数形式打印:因为要分割整数,所以Python将结果表示为
float
,而不是int
。要按照您的要求格式化float
,您必须使用字符串格式:所以把它插入你的代码:
试试这个
这就是你真正想要的吗?
相关问题 更多 >
编程相关推荐