簡體   English   中英

在Matlab中將科學計數形式的數字轉換為字符串

[英]Convert number in scientific notation to string in Matlab

我想在Matlab中將科學數字轉換為字符串,但使用一種相當特定的格式。 我從以下內容開始:

>> num2str(1E4, '%e')

ans =

    '1.000000e+04'

然后使用formatstring來消除第一部分中小數點后的數字

>> num2str(1E4, '%.0e')

ans =

    '1e+04'

問題是我想要它確切地用數字來表示,即我想要一個像這樣的字符串'1E4' 我可以使用strrep擺脫該加號,但我拒絕使用它擺脫+04部分的前導0,因為我還有其他變量實例,例如+10 將數字重生成為字符串而無需借助一些大的復雜算法是否可行? 最好使用formatstring?

根據num2str文檔,您需要使用格式參數和精度參數,如下所示:

num2str(1E4,'%.E')

結果

ans = 1E+04

了解有關sprintf的信息 LEA A是您的電話號碼,要實現所需的目標,可以使用:

sprintf('%1.0e',A)

這是將整數轉換為科學計數法的方法:

function out= scientific(num)
    E = 0;
    if mod(num,10) == 0
        [f n]=factor(num);
        E=min(n(ismember(f,[2 5])));
    end
    out = sprintf('%dE%d',num/10^E,E);
end

>> scientific(134)
ans = 134E0
>> scientific(134000)
ans = 134E3

接受輸入作為向量的另一種解決方案:

function out= scientific2(num)
    E = sum(cumsum(num2str(num(:))-48,2,'reverse')==0,2);
    out = num2str([num(:)./10.^E,E],'%dE%d\n');
end

您可以結合使用sprintfregexprep

my_format = @(x)regexprep(sprintf('%.E',x),'E\+0*','E');

例子:

>> my_format(1E4)

ans =

1E4

>> my_format(2E12)

ans =

2E12

這並非對所有情況都理想:

>> my_format(5) % Expect 5E0

ans =

5E

>> my_format(1E-4) % Expect 1E-4

ans =

1E-04

我們可以用令牌解決第一種情況:

f2 = @(x)regexprep(sprintf('%.E',x),'E\+0*(\d)','E$1');

>> {f2(1E4), f2(1E20), f2(5)}

ans = 

    '1E4'    '1E20'    '5E0'

我們可以用令牌和?來解決第二種情況? 量詞

>> f3 = @(x)regexprep(sprintf('%.E',x),'E\+?(-?)0*(\d)','E$1$2');
>> {f3(1E4), f3(1E20), f3(5),f3(1E-1),f3(2E-12)}

ans = 

    '1E4'    '1E20'    '5E0'    '1E-1'    '2E-12'

為了解釋, sprintf('%.E',x)格式x科學計數法與E ,例如1E+04 ,然后找到

'E\+?(-?)0*(\d)'

 E                 The literal E
  \+?(-?)          Either a + or a -; if - then save to group $1
         0*        As many 0s as it can match, subject to...
           (\d)    At least one digit, saves digit to group $2

最后,將匹配的文本替換為E$1$2 ,即文字E ,然后是組$1 (如果找到E-則為減號,如果找到E+E+ )和$2組(一位數)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM