【发布时间】:2013-11-13 01:31:34
【问题描述】:
我正在编写一个函数,该函数需要将浮点值转换为要传递给(封闭)C 代码的字符串。字符串转换是我的代码中最慢的部分,输入数组可能非常大。 sprintf 速度很快,g 转换字符导致紧凑的表示:
x = [-1.75 0 1 pi 2^57];
sprintf('%.17g ',x)
返回
-1.75 0 1 3.1415926535897931 1.4411518807585587e+17
与sprintf 的C 等效项一样,insignificant zeros are not printed 在指定g 或G 转换字符时。但是,我使用的 C 代码要求数值包括小数点和尾随零。保持相同精度的另一个选项是:
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); 作为您的测试数组来进行计时。
【问题讨论】:
标签: string matlab string-formatting printf