2 つの整数を割って分数を出力したい場合は、小学校で手で割るのと同じようにできます。最初の除算で結果の整数部分が得られます。次に、剰余部分に 10 を掛けて除数で除算し、ゼロになるか、目的の精度に達して分数を取得します。
32/5
上記の例を見てください
整数部:
32/5 = 6 → Print out "6."
小数部:
Remainder: 2, multiply it by 10 → 2*10 = 20
20/5 = 4 → Print out "4"
Remainder: 0, stop here
上記のように、より複雑な除算を行うこともできます。各ステップの後に剰余に 10 を掛けるだけです。結果が無限の場合は、十分な精度が得られたら停止します。例: 25/11 = 2.27272727...
25/11 = 2 R 3 → 2.
3*10/11 = 2 R 8 → 2
8*10/11 = 7 R 3 → 7
3*10/11 = 2 R 8 → 2
8*10/11 = 7 R 3 → 7
and so on...
もちろん、10 Nを掛けて N 個の小数桁を一度に取得することで、さらに高速に実行できます。
または、浮動小数点値を使用し、FDIV
他の人が言ったように浮動小数点除算を行います。その後、float の結果を string に変換する方法はたくさんありますが、正しく丸められた結果を取得するのは非常に難しいため、その目的で作成されたライブラリを使用することをお勧めします。
ただし、非常に単純なデモでは、上記の方法も使用できます。
- 結果の整数部分を分割して出力し、その後に
.
- 整数部分に 10 を掛けると、整数部分が次の小数桁になります。
- 整数部分を削除し、目的の精度に達するまで上記の手順を繰り返します
バイナリ浮動小数点プロパティによるエラーを無視すると、大まかな例は次のようになります。
11.157
Int part: 11 → print 11.
Fractional part:
0.157*10 = 1.57 → print 1
0.57*10 = 5.7 → print 5
0.7*10 = 7 → print 7
より詳細な情報は、Turn float into string にあります。