我正在编写一个函数,该函数需要将浮点值转换为要传递到(关闭的)C 代码中的字符串。字符串转换是我的代码中最慢的部分,输入数组可能非常大。sprintf
速度很快,并且g
转换字符导致紧凑的表示:
x = [-1.75 0 1 pi 2^57];
sprintf('%.17g ',x)
返回
-1.75 0 1 3.1415926535897931 1.4411518807585587e+17
与sprintf
's C 等效项一样,在指定或转换字符时不会打印无意义的零。但是,我使用的 C 代码要求数值包括小数点和尾随零。保持相同精度的另一个选项是:g
G
x = [-1.75 0 1 pi 2^57];
sprintf('%.17f ',x)
返回
-1.75000000000000000 0.00000000000000000 1.00000000000000000 3.14159265358979312 144115188075855872.00000000000000000
但这会导致字符串数组膨胀(输入向量可能很大且具有复值)。
如何有效且紧凑地(速度和内存)将我的数字打印到字符串,同时在需要时添加尾随零并产生这样的输出?
-1.75 0.0 1.0 3.1415926535897931 1.4411518807585587e+17
理想情况下,这可以直接在格式字符串中完成,以便sprintf
可以完成工作。如果这不起作用,还有哪些其他选择,最快的是什么?regexprep
太慢了所以别想了。如果您愿意,您可以将x = repmat([-1.75 0 1 pi 2^57],1e5,1);
其用作测试阵列以用于计时目的。