0.011124325465476454
MATLAB で数値を文字列に変換したいとします。
当たったら
mat2str(0.011124325465476454,100)
0.011124325465476453
最後の桁が異なるものを取得します。
当たったらnum2str(0.011124325465476454,'%5.25f')
私は得る0.0111243254654764530000000
望ましくないゼロが埋め込まれており、最後の桁が異なります (3 は 4 のはずです)。
乱数の小数を含む数値を正確な文字列一致に変換する方法が必要です (ゼロが埋め込まれておらず、最後の数字が変更されていません)。
そのような方法はありますか?
編集: Amro と nrz が提供した精度に関する情報を念頭に置いていないので、問題に関する追加情報を追加します。実際に変換する必要がある数値は、それらを txt ファイルに出力する C++ プログラムからのものであり、それらはすべて C++double
型です。[注: txt ファイルから MATLAB に数値を入力する部分は、私がコーディングしたものではなく、数値に変換せずに数値を文字列として保持するように変更することは実際には許可されていません。変換したい数値であるこのコードの「出力」にのみアクセスできます]。これまでのところ、小数点以下 17 桁を超える数値は取得していません (注: したがって、上記の例は小数点以下 18 桁であり、あまり参考にはなりません)。
ここで、番号が 15 桁の場合、たとえば 0.280783055069002
その後num2str(0.280783055069002,'%5.17f')
またはmat2str(0.280783055069002,17)
戻ります
0.28078305506900197
これは正確な数ではありません (最後の数字を参照)。
しかし、私がヒットした場合、私 mat2str(0.280783055069002,15)
は得ます
0.280783055069002
どちらが正しい!!!
おそらく、問題を「コード化」する方法は無数にあります (たとえば、変換を行うルーチンを作成するなど)。 10 進数 (ただし 17 を超えない);