首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使python print1与1.0相比

如何使python print1与1.0相比
EN

Stack Overflow用户
提问于 2012-10-27 11:55:15
回答 3查看 11.7K关注 0票数 6

我正在做一个数学解题程序,它一直把整个数字打印成小数。比如1是1.0,5是5.0,我的代码是:

代码语言:javascript
运行
复制
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.")
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-27 11:59:08

因为要除以整数,所以Python将结果表示为float,而不是int。要根据需要设置float的格式,您必须使用字符串格式:

代码语言:javascript
运行
复制
>>> print('{:g}'.format(3.14))
3.14
>>> print('{:g}'.format(3.0))
3

所以把它插入到你的代码中:

代码语言:javascript
运行
复制
print("Y = {:g}X - {}.".format(m, b))
票数 8
EN

Stack Overflow用户

发布于 2012-10-27 12:00:07

尝尝这个,

代码语言:javascript
运行
复制
> x = 10.0
> print int(x)
10
> print x
> 10.0

这就是你真正要找的吗?

票数 4
EN

Stack Overflow用户

发布于 2012-10-27 13:24:08

执行此操作时:

代码语言:javascript
运行
复制
m = (y1-y2) / (x1-x2)

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

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

解决这个问题的正确方法取决于您实际想要做什么。

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

代码语言:javascript
运行
复制
m = (y1-y2) // (x1-x2)

这意味着,比如说,如果你使用x1, x2, y1, y2 = 4, 2, 2, 1,你最终会得到b = 2 (2 - 0 * 4)。我怀疑这不是您想要的;您实际上希望将4乘以1/2,然后对结果进行舍入。

在这种情况下,您可以在舍入相同的位置进行转换:

代码语言:javascript
运行
复制
m = int(round(m, 0))
b = int(round(b, 0))

注意,对round的现有调用实际上并没有做任何事情;round(m, 0)不修改m,它返回一个新值,该值是m的四舍五入版本,您必须将该值分配回m (或其他地方)。

还有一件事要考虑:你可能真的想要字面上的一半,而不是“最接近0.5的浮点表示”。

您可能实际上并不关心差异-除非您使用的是非常大的整数,否则舍入误差将永远不可见。但如果你真的关心,你可能想要考虑使用第三方精确分数模块(例如,clnum),或者可能使用标准库decimal。这意味着你必须更明确,所以我不会这样做,除非你认为这是必要的。但如果它是必要的,它将看起来像这样:

代码语言:javascript
运行
复制
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等),从不对它们进行舍入或转换,并强制将它们打印为整数:

代码语言:javascript
运行
复制
print("Y = {:.0g}X - {:.0g}.".format(m, b))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13097099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档