Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String MATLAB:将字符串转换为数字,然后再转换回字符串_String_Matlab_Type Conversion - Fatal编程技术网

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

String MATLAB:将字符串转换为数字,然后再转换回字符串,string,matlab,type-conversion,String,Matlab,Type Conversion,有一个字符串包含任意格式的数字(例如,12、-34.5和6.78e-9)。目标是将此字符串转换为相应的数字,然后将此数字转换回字符串,以便(a)保留原始字符串中给定的精度,(b)生成的字符串具有适当的格式(可能,最适当的格式是原始字符串的格式)。我认为使用str2num和num2str可以很容易地解决这个问题;然而,在某些情况下,MATLAB似乎破坏了最终结果,如下所示: >> a = '1e23' a = 1e23 >> b = s

有一个字符串包含任意格式的数字(例如,12、-34.5和6.78e-9)。目标是将此字符串转换为相应的数字,然后将此数字转换回字符串,以便(a)保留原始字符串中给定的精度,(b)生成的字符串具有适当的格式(可能,最适当的格式是原始字符串的格式)。我认为使用
str2num
num2str
可以很容易地解决这个问题;然而,在某些情况下,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.9999999999999E+22
问题

谢谢大家!

问候,,
Ivan

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

从你的评论来看,我认为你会很高兴:

format short g
对于较大的数字,它将给出:

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

ans =

        1e+23
对于少数人:

 x = num2str(1);str2num(x)

ans =

     1

@纳坦,谢谢你的回复。我知道FP算法的问题。我能问一下,这有什么意义?不管怎样,你都可以保存字符串和数字……关键是要得到一个人性化的字符串,保持原始精度,而不需要针对特定情况编写一系列特殊的解决方案。那么为什么不同时保存字符串和数字呢?如果你想要完全相同的数字(并且不想“帮助”输入1/2之类内容的人),保留字符串确实是最好的解决方案。但是,如果要对其执行操作,则需要选择所需的输出格式。这假设您只想这样表示数字。如果您确实想要不同的字符串内容,请尝试以下操作:
x=num2str(1e20,'%g')
似乎
num2str(…,'%g')
正是我想要的。非常感谢!