在 Matlab 中以指数形式格式化带前导 point/dot 的数字
Format number with leading point/dot in exponential in Matlab
我有几个包含数字的变量。
我需要的都是'.xxxxxE+YY'风格的字符串。
例如'250' 将是没有 0 的 '.25000E+03'(始终是 '.' 前导)。
我尝试了几种方法,阅读了 Matlab 帮助并在此处进行了 google 和搜索,但到目前为止没有成功。
有人知道这个技巧吗?谢谢!
这是一种方法。我假设数字是正数(否则你需要单独处理减号)。
x = 250;
e = floor(log10(x))+1;
s1 = sprintf('.%5i', round(x*10^(5-e)));
s2 = sprintf('%02d', abs(e));
s = [s1 'E' repmat('+', e>=0) repmat('-', e<0) s2];
字符串的 repmat('+', e>=0) repmat('-', e<0)
部分只是为指数引入 '+'
或 '-'
符号的一种方式(repmat
中的一个给出了一个字符,另一个给出一个空字符串)。当然也可以用 if
-else
子句来完成。
示例结果:
250
给出 '.25000E+03'
1.23456
给出 '.12346E+01'
.1
给出 '.10000E+00
.0123456
给出 '.12346E-01'
我有几个包含数字的变量。
我需要的都是'.xxxxxE+YY'风格的字符串。
例如'250' 将是没有 0 的 '.25000E+03'(始终是 '.' 前导)。
我尝试了几种方法,阅读了 Matlab 帮助并在此处进行了 google 和搜索,但到目前为止没有成功。
有人知道这个技巧吗?谢谢!
这是一种方法。我假设数字是正数(否则你需要单独处理减号)。
x = 250;
e = floor(log10(x))+1;
s1 = sprintf('.%5i', round(x*10^(5-e)));
s2 = sprintf('%02d', abs(e));
s = [s1 'E' repmat('+', e>=0) repmat('-', e<0) s2];
字符串的 repmat('+', e>=0) repmat('-', e<0)
部分只是为指数引入 '+'
或 '-'
符号的一种方式(repmat
中的一个给出了一个字符,另一个给出一个空字符串)。当然也可以用 if
-else
子句来完成。
示例结果:
250
给出'.25000E+03'
1.23456
给出'.12346E+01'
.1
给出'.10000E+00
.0123456
给出'.12346E-01'