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 は結果をfloatではなく として表しintます。s を好きなようにフォーマットするfloatには、文字列フォーマットを使用する必要があります。

>>> 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)

int (整数) ではなく、float (実数の浮動小数点表現) を取得します。

そして、フロートなのでm、フロートでbもあります。次に、float を呼び出すstrと、小数点が得られます。

これを修正する正しい方法は、実際に何をしたいかによって異なります。

本当に整数のみを扱いたい場合は、整数除算を使用できます。

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

つまり、たとえば、( ) になる場合を意味x1, x2, y1, y2 = 4, 2, 2, 1します。それはあなたが望んでいるものではないと思います。あなたは実際にそれを で乗算し、後で結果を丸めたいと思っています。b = 22 - 0 * 441/2

その場合、丸めるのと同じ場所で変換を行うことができます。

m = int(round(m, 0))
b = int(round(b, 0))

既存の への呼び出しroundは実際には何もしていないことに注意してください。round(m, 0)は を変更せずm、 の丸めバージョンである新しい値を返します。これを(または別の場所に)m割り当て直す必要があります。m

考慮すべきもう1つのこと:おそらく、「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 に答える