6

我正在制作一个数学求解程序,它不断将整数打印为小数。就像 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.")
4

3 回答 3

8

由于您正在划分整数,因此 Python 将结果表示为 a float,而不是 a int。要根据需要格式化floats,您必须使用字符串格式化:

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

所以把它插入你的代码:

print("Y = {:g}X - {}.".format(m, b))
于 2012-10-27T03:59:08.290 回答
4

试试这个,

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

这是你真正想要的吗?

于 2012-10-27T04:00:06.883 回答
0

当你这样做时:

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))
于 2012-10-27T05:24:08.020 回答