1

任意の形式の数値を含む文字列があります (例: 12、-34.5、および 6.78e-9)。目標は、この文字列を対応する数値に変換してから、(a) 元の文字列で指定された精度が維持され、(b) 結果の文字列が適切な形式 (おそらく、最も適切な形式は、元の文字列の形式です)。str2num問題はand num2str;を使用して簡単に解決できると思いました。ただし、場合によっては、以下に示すように、MATLAB が最終結果をマングリングしているように見えます。

    >> a = '1e23'

    a =

    1e23

    >> b = str2num(a)

    b =

       1.0000e+23

    >> c = num2str(b)

    c =

    9.999999999999999e+22

1 つの解決策は、一般的な書式文字列を使用することです。

    >> c = num2str(b, '%e')

    c =

    1.000000e+23

ただし、この場合、出力は小さな注文の数に対してかなり面倒に見えます。

    >> d = num2str(1, '%e')

    d =

    1.000000e+00

ほとんどの場合、num2strパラメータを追加しなくてもかなりうまく機能し、適切にフォーマットされた文字列が得られます。問題は次のとおりです。問題を解消する方法はあり9.999999999999999e+22ますか。

ありがとうございました!

よろしく、イワン

4

1 に答える 1

2

一般に、1 つの入力文字列の表現には、形式を決定するのに十分な情報が含まれていません。したがって (わずかに異なる数値を出力したいが、単純に数値を文字列形式で格納できない場合)、最も簡単な方法は、好みの形式を試して見つけることです。

あなたのコメントから判断すると、次の点に満足していただけると思います。

format short g

多数の場合、次のようになります。

x = num2str(1.0000e+23);str2num(x)

ans =

        1e+23

少数の場合:

 x = num2str(1);str2num(x)

ans =

     1
于 2013-10-01T07:52:19.333 に答える