MATLAB:将字符串转换为数字,然后返回字符串

时间:2013-10-01 07:11:18

标签: string matlab type-conversion

有一个字符串包含任意格式的数字(例如,12,-34.5和6.78e-9)。目标是将此字符串转换为相应的数字,然后将此数字转换回字符串,以便(a)保留原始字符串中给出的精度,以及(b)生成的字符串具有足够的格式(可能,最合适的格式是原始字符串的格式)。我认为使用str2numnum2str可以轻松解决问题;但是,在某些情况下,MATLAB似乎正在破坏最终结果,如下所示:

    >> a = '1e23'

    a =

    1e23

    >> b = str2num(a)

    b =

       1.0000e+23

    >> c = num2str(b)

    c =

    9.999999999999999e+22

一种解决方案是使用通用格式字符串:

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

    c =

    1.000000e+23

但是,在这种情况下,对于小订单的数量,输出看起来相当麻烦:

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

    d =

    1.000000e+00

在大多数情况下,没有附加参数的num2str做得非常好,从而产生格式良好的字符串。问题是:有没有办法消除9.999999999999999e+22问题?

谢谢!

此致 伊万

1 个答案:

答案 0 :(得分:2)

通常,一个输入字符串的表示不包含足以确定格式的信息。因此(假设你想输出稍微不同的数字而不能简单地以字符串格式存储数字),最简单的方法是尝试找到你喜欢的格式。

从您的评论来看,我认为您会满意:

format short g

对于大数字,它会给出:

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

ans =

        1e+23

对于小数字:

 x = num2str(1);str2num(x)

ans =

     1