如何使python打印出1,而不是1.0

2024-05-08 04:57:00 发布

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

我正在做一个数学解题程序,它一直把整数打印成小数。比如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.")

Tags: the程序input数学intpointprintx1
3条回答

当您这样做时:

m = (y1-y2) / (x1-x2)

你得到的是浮点(实数的浮点表示),而不是int(整数)。

然后,因为m是一个浮点数,b也是一个浮点数。然后,当您在浮点上调用str时,会得到一个小数点。

正确的解决方法取决于你真正想做什么。

如果只想处理整数,可以使用整数除法:

m = (y1-y2) // (x1-x2)

也就是说,如果x1, x2, y1, y2 = 4, 2, 2, 1你最终会得到b = 22 - 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))

因为要分割整数,所以Python将结果表示为float,而不是int。要按照您的要求格式化float,您必须使用字符串格式:

>>> print('{:g}'.format(3.14))
3.14
>>> print('{:g}'.format(3.0))
3

所以把它插入你的代码:

print("Y = {:g}X - {}.".format(m, b))

试试这个

> x = 10.0
> print int(x)
10
> print x
> 10.0

这就是你真正想要的吗?

相关问题 更多 >