<p>当您这样做时:</p>
<pre><code>m = (y1-y2) / (x1-x2)
</code></pre>
<p>你得到的是浮点(实数的浮点表示),而不是int(整数)。</p>
<p>然后,因为<code>m</code>是一个浮点数,<code>b</code>也是一个浮点数。然后,当您在浮点上调用<code>str</code>时,会得到一个小数点。</p>
<p>正确的解决方法取决于你真正想做什么。</p>
<p>如果只想处理整数,可以使用整数除法:</p>
<pre><code>m = (y1-y2) // (x1-x2)
</code></pre>
<p>也就是说,如果<code>x1, x2, y1, y2 = 4, 2, 2, 1</code>你最终会得到<code>b = 2</code>(<code>2 - 0 * 4</code>)。我怀疑这不是你想要的;你实际上想把这个<code>4</code>乘以<code>1/2</code>,然后再把结果四舍五入。</p>
<p>在这种情况下,您可以在相同的位置进行转换:</p>
<pre><code>m = int(round(m, 0))
b = int(round(b, 0))
</code></pre>
<p>请注意,您对<code>round</code>的现有调用实际上没有任何作用;<code>round(m, 0)</code>不会修改<code>m</code>,它返回一个新值,该值是<code>m</code>的舍入版本,您必须将其分配回<code>m</code>(或其他位置)。</p>
<p>还有一件事需要考虑:您可能真的需要一半,而不是“最接近0.5的浮点表示”。</p>
<p>你可能并不真正关心差异,除非你使用的是非常大的整数,否则舍入误差将永远不可见。但是如果您确实需要注意,您可能需要考虑使用第三方精确分数模块(例如<code>clnum</code>),或者可能使用标准库<code>decimal</code>。这意味着你必须更加明确,所以除非你认为有必要,否则我不会这么做。但如果有必要的话,它会像这样:</p>
<pre><code>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))
</code></pre>
<p>最后,您可以始终将数字保持为<code>float</code>s(或<code>Decimal</code>s等),而不舍入或转换它们,并强制它们以整数形式打印:</p>
<pre><code>print("Y = {:.0g}X - {:.0g}.".format(m, b))
</code></pre>