1

浮動小数点数を文字列に変換しようとしています。ostringstream や sprintf などを使用して実行できることはわかっていますが、私が取り組んでいるプロジェクトでは、独自の関数のみを使用して実行しようとしています(外部関数を使用せずに独自の文字列クラスを作成しています)。私は完璧な表現を望んでいません。たとえば、標準の文字列ストリームの場合と同様に、1.0420753e+4 のように大きい数値または小さい数値でこれが発生してもかまいません。

浮動小数点数がどのように機能するか (符号、指数、仮数など) と、それらが表示されるものとは異なる方法でどのように表現されるかを知っています (それが難しい理由です)。std c++ ライブラリで実行できるため、これが可能であることはわかっています。自分で実行する方法がわかりません。

編集:これの独自の整数バージョンを作成しました(intを独自のCStringクラスに変換します)。

4

4 に答える 4

4

まず、これを自分で行わないでください。iOS には、浮動小数点オブジェクトをフォーマットするための標準 C++ 機能があり、Android にもあると思います。

第二に、これを自分で行わないでください。丸め誤差なしで行うのは困難です。それを行うための手法は既に知られており、公開されているため、Stack Overflow で一般的に見られるアルゴリズムではなく、適切なリファレンスを使用する必要があります。これに関する古典的な論文は、 David M. Gay による Correctly Rounded Binary-Decimal and Decimal-Binary Conversionsであり、ここにDavid Gay のコードがあります。

于 2013-06-28T13:35:00.450 に答える
2

簡単な方法: 値が ≤ 1 になるまで 10 で割ります。これにより、小数点以下の桁数が得られます.。の後に必要な桁ごとに、元の数値に 10 を掛けて、.丸めます。結果の整数を文字列化し、..

于 2013-06-28T11:21:10.593 に答える
0

ええと、本当に自分の四角いホイールを再発明したいのなら、おそらく最も簡単な方法は、float から int へのコンバーターを記述することです (ビットパターンがどのように機能するかを知っていると言いました)、またはおそらく 2 つの ints - 1 つは小数部用、もう 1 つは残りは、すでに存在する REUSING コードを出力します

于 2013-06-28T11:08:23.230 に答える