私は、任意の基数 (2-36) を別の基数 (整数) に変換できるシステムを作成しました。また、任意の実数を基数 10 から他の基数 (2-36) に変換できます。
私の問題は、有理数/無理数を 10 以外の基数から別の基数に変換するときに発生します。
小数点の右側の変換には、次のアルゴリズムを使用します。
1) 入力の小数点の右側 (0.xxxxxx--->) を取り、変換先の基数を掛けます。
2) 1 より大きい数値 (点の左側) を取り、変換された数値の右側に追加します。
3) 積の右辺を取り、次の繰り返しで乗数として使用します (基数に掛けます)。
4) 満足するまで繰り返すか、整数 (右側に 0) を残します。
これは、浮動小数点数を 10 進数から別の基数に変換する場合にうまく機能しますが、明らかに、10 進数でない基数から FROM を変換することはできません。
だから私が試したのは、その初期値を小数点の右側にある10を基数に変換し、数学部分を実行してから、それを出力値に追加するときに元の基数に戻すことです(前に新しい基数に変換されます)追加されています)。
残念ながら、これは小数点の右側に対して誤った結果を返します。したがって、10 を基数としていない基数から変換すると、左側は常に正しいが、右側は正しくない答えが得られます。
これを機能させる方法についてのアイデアはありますか?それとも、そうではないのでしょうか?
編集
または、誰かが私をリンクしたり、有理16進数値を10進数に変換する方法を教えてもらえますか? この問題を回避するには、それだけで十分です。
解決
将来、この質問を読んだ他の人のために、この問題のかなり簡単な回避策を見つけました。
あなたがしなければならないのは、小数の右側の数字(底が何であれ)を取り、それを小数に変換することです(整数を変換する方法はこちらで見ることができます)。次に、その数値を取り、最大位の値で割ります。例えば:
A.C
C == 12 (dec)
12 / 16 = .75 (this is the fractional value in decimal)
次に、その小数値を取得して、上で説明したアルゴリズムを実行できます。
この問題についてみんなの助けをありがとう!