我正在做一个数学解题程序,它一直把整个数字打印成小数。比如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.")发布于 2012-10-27 11:59:08
因为要除以整数,所以Python将结果表示为float,而不是int。要根据需要设置float的格式,您必须使用字符串格式:
>>> print('{:g}'.format(3.14))
3.14
>>> print('{:g}'.format(3.0))
3所以把它插入到你的代码中:
print("Y = {:g}X - {}.".format(m, b))发布于 2012-10-27 12:00:07
尝尝这个,
> x = 10.0
> print int(x)
10
> print x
> 10.0这就是你真正要找的吗?
发布于 2012-10-27 13:24:08
执行此操作时:
m = (y1-y2) / (x1-x2)你得到的是一个浮点数(实数的浮点表示),而不是整数(一个整数)。
然后,因为m是一个浮点型,所以b也是一个浮点型。然后,当您在浮点型上调用str时,您会得到一个小数点。
解决这个问题的正确方法取决于您实际想要做什么。
如果你真的想只处理整数,你可以使用整数除法:
m = (y1-y2) // (x1-x2)这意味着,比如说,如果你使用x1, x2, y1, y2 = 4, 2, 2, 1,你最终会得到b = 2 (2 - 0 * 4)。我怀疑这不是您想要的;您实际上希望将4乘以1/2,然后对结果进行舍入。
在这种情况下,您可以在舍入相同的位置进行转换:
m = int(round(m, 0))
b = int(round(b, 0))注意,对round的现有调用实际上并没有做任何事情;round(m, 0)不修改m,它返回一个新值,该值是m的四舍五入版本,您必须将该值分配回m (或其他地方)。
还有一件事要考虑:你可能真的想要字面上的一半,而不是“最接近0.5的浮点表示”。
您可能实际上并不关心差异-除非您使用的是非常大的整数,否则舍入误差将永远不可见。但如果你真的关心,你可能想要考虑使用第三方精确分数模块(例如,clnum),或者可能使用标准库decimal。这意味着你必须更明确,所以我不会这样做,除非你认为这是必要的。但如果它是必要的,它将看起来像这样:
m = decimal.Decimal(y1-y2) / (x1-x2)
b = y1 - m * x1
m = int(m.to_integral(rounding=decimal.ROUND_HALF_UP))
b = int(b.to_integral(rounding=decimal.ROUND_HALF_UP))最后,您可以始终将数字保留为floats (或Decimals等),从不对它们进行舍入或转换,并强制将它们打印为整数:
print("Y = {:.0g}X - {:.0g}.".format(m, b))https://stackoverflow.com/questions/13097099
复制相似问题