【问题标题】:Matlab Clipboard Precision - Format long -Matlab剪贴板精度 - 格式长 -
【发布时间】:2015-04-24 11:24:21
【问题描述】:

我需要从 matlab 复制粘贴几个矩阵到 excel,所以我进行了研究,我发现了一个非常棒的脚本,称为 num2clip,它将所选数组带到剪贴板。 唯一的问题是数字格式很短,而我希望它很长。 我怀疑脚本中使用了“双”类型,但我还是 matlab 的新手,所以我确实有一些重要的缺陷。

这是我找到的脚本,根据你我需要做什么才能保持长输入格式?

function arraystring = num2clip(array)

function arraystring = num2clip(array)

%NUM2CLIP copies a numerical-array to the clipboard
%   
%   ARRAYSTRING = NUM2CLIP(ARRAY)
%   
%   Copies the numerical array ARRAY to the clipboard as a tab-separated
%   string.  This format is suitable for direct pasting to Excel and other
%   programs.
%   
%   The tab-separated result is returned as ARRAYSTRING.  This
%   functionality has been included for completeness.
%   
%Author: Grigor Browning
%Last update: 02-Sept-2005

%convert the numerical array to a string array
%note that num2str pads the output array with space characters to account
%for differing numbers of digits in each index entry
arraystring = num2str(array); 

%add a carrige return to the end of each row
arraystring(:,end+1) = char(10);

%reshape the array to a single line
%note that the reshape function reshape is column based so to reshape by
%rows one must use the inverse of the matrix
%reshape the array to a single line
arraystring = reshape(arraystring',1,prod(size(arraystring))); 

%create a copy of arraystring shifted right by one space character
arraystringshift = [' ',arraystring]; 

%add a space to the end of arraystring to make it the same length as
%arraystringshift
arraystring = [arraystring,' ']; 

%now remove the additional space charaters - keeping a single space
%charater after each 'numerical' entry
arraystring = arraystring((double(arraystring)~=32 |...
          double(arraystringshift)~=32) &...
          ~(double(arraystringshift==10) &...
          double(arraystring)==32) );

%convert the space characters to tab characters
arraystring(double(arraystring)==32) = char(9); 
format long e

%copy the result to the clipboard ready for pasting
clipboard('copy',arraystring); 

最好的问候。

【问题讨论】:

  • 所以在您的情况下使用 matlab 函数 xlswrite 不起作用?

标签: matlab


【解决方案1】:

只需将行替换为:

arraystring = num2str(array) ; 

到这样的一行:

arraystring = num2str(array,'%15.15f') ;

这将为您提供double 类型(15 位)所能达到的最大精度。

查看num2str 文档了解更多自定义格式。

【讨论】:

    【解决方案2】:

    感谢 Hoki 的参与。 顺便说一句,我没有时间浏览所有很棒的文档。 当我尝试您的解决方案时,复制的数据全部插入到一个单元格中,我只需要更改: arraystring = num2str(array,'%15.15f') ; 到 arraystring = num2str(array,15) ;

    祝你有美好的一天!

    【讨论】: