4

我正在尝试生成以下内容:使用 disp 和 num2str 命令,x 和 y 的新值分别为 -4 和 7。我试图这样做 disp('x 和 y 的新值分别是 num2str(x) 和 num2str(y)'),但它给出了 num2str 而不是适当的值。我应该怎么办?

4

2 回答 2

5

就像 Colin 提到的那样,一种选择是使用 将数字转换为字符串num2str,手动连接所有字符串并将最终结果输入disp. 不幸的是,它会变得非常尴尬和乏味,尤其是当您要打印大量数字时。

相反,您可以利用sprintfMATLAB 中与 C 编程语言对应物非常相似的强大功能。这会产生更短、更优雅的语句,例如:

disp(sprintf('The new values of x and y are %d and %d respectively', x, y))

您可以使用格式说明符控制变量的显示方式。例如,如果x不一定是整数,您可以使用%.4f,例如,而不是%d

编辑:就像乔纳斯指出的那样,您也可以使用fprintf(...)代替disp(sprintf(...)).

于 2012-11-09T00:44:21.637 回答
5

尝试:

disp(['The new values of x and y are ', num2str(x), ' and ', num2str(y), ', respectively']);

您实际上也可以省略逗号,但恕我直言,它们使代码更具可读性。

顺便说一句,我在这里所做的是将 5 个字符串连接在一起形成一个字符串,然后将该单个字符串输入到disp函数中。请注意,我基本上使用与数字矩阵相同的语法连接字符串,即[x, y, z]. 我可以这样做的原因是 matlab 在内部将字符串存储为数字行向量,每个字符表示一个元素。因此,上述操作本质上是水平连接 5 个数字行向量!

还有一点:您的代码失败了,因为 matlab 将您的 num2str(x) 视为字符串而不是函数。毕竟,您可能想要打印“num2str(x)”,而不是使用函数调用来评估它。在我的代码中,第一个、第三个和第五个字符串被定义为字符串,而第二个和第四个是计算为字符串的函数。

于 2012-11-08T23:50:48.363 回答