如何在MATLAB中设置小数点后1位的科学记数法格式?
我试过如何在MATLAB中设置小数点后1位的科学记数法格式?,matlab,string-formatting,Matlab,String Formatting,我试过sprintf(“%.1e”,x),但这给了我6.3000e-16。如何切断零并仅显示6.3e-16?我还在表格中显示数字 编辑:所以现在可以正确地显示一些数字,但其他数字根本不以科学记数法显示。我使用的是R2018a 这是我正在使用的代码 n = zeros(19,1); a = zeros(19,1); b = zeros(19,1); c = zeros(19,1); d = zeros(19,1); format sho
sprintf(“%.1e”,x)
,但这给了我6.3000e-16
。如何切断零并仅显示6.3e-16
?我还在表格中显示数字
编辑:所以现在可以正确地显示一些数字,但其他数字根本不以科学记数法显示。我使用的是R2018a
这是我正在使用的代码
n = zeros(19,1);
a = zeros(19,1);
b = zeros(19,1);
c = zeros(19,1);
d = zeros(19,1);
format short
for i = 2:20
w = 1/(2000 * i);
x = 1/(1000 * i);
y = 1/(50 * i);
z = 1/(20 * i);
n(i-1) = sprintf("%d", i);
a(i-1) = sprintf("%.1e", w);
b(i-1) = sprintf("%.1e", x);
c(i-1) = sprintf("%.1e", y);
d(i-1) = sprintf("%.1e", z);
end
table( n, a, b, c, d )
以下是输出:
19×5 table
n a b c d
__ _______ _______ ______ ______
2 0.00025 0.0005 0.01 0.025
3 0.00017 0.00033 0.0067 0.017
4 0.00013 0.00025 0.005 0.013
5 0.0001 0.0002 0.004 0.01
6 8.3e-05 0.00017 0.0033 0.0083
7 7.1e-05 0.00014 0.0029 0.0071
8 6.3e-05 0.00013 0.0025 0.0063
9 5.6e-05 0.00011 0.0022 0.0056
10 5e-05 0.0001 0.002 0.005
11 4.5e-05 9.1e-05 0.0018 0.0045
12 4.2e-05 8.3e-05 0.0017 0.0042
13 3.8e-05 7.7e-05 0.0015 0.0038
14 3.6e-05 7.1e-05 0.0014 0.0036
15 3.3e-05 6.7e-05 0.0013 0.0033
16 3.1e-05 6.3e-05 0.0013 0.0031
17 2.9e-05 5.9e-05 0.0012 0.0029
18 2.8e-05 5.6e-05 0.0011 0.0028
19 2.6e-05 5.3e-05 0.0011 0.0026
20 2.5e-05 5e-05 0.001 0.0025
您可以使用“fprintf”:
要显示更多或更少的数字,只需调整点后的数字。在代码中,将字符串指定给双浮点数组。看起来MATLAB会自动将字符串转换为double来存储它。因此,格式会丢失:
>> sprintf("%.1e", 1/1000)
ans =
"1.0e-03"
>> a=0;
>> a(1) = sprintf("%.1e", 1/1000)
a =
1.0000e-03
>> class(a)
ans =
'double'
相反,请使用字符串数组:
a = strings(19,1);
%...
a(i-1) = sprintf("%.1e", w);
我不习惯新的字符串,这种行为让我感到惊讶。将数字指定给字符串会将数字转换为字符串,将字符串指定给数字会将其转换回数字。“老式”字符数组不会出现这种情况:
>> a=0;
>> a(1) = sprintf('%.1e', 1/1000);
Unable to perform assignment because the left and right sides have a different number of elements.
使用字符数组时,将其存储在单元格数组中:
a = cell(19,1);
%...
a{i-1} = sprintf('%.1e', w);
我需要科学记数法。因此
3.1e+00
。但问题是我无法使表格的格式保持一致。啊,太好了,谢谢。将格式化字符串转换回浮点数的最佳方法是什么,这样表就不会显示引号marks@alexanderd5398:好问题。我想那是一罐完全不同的虫子。恐怕我对表格不太熟悉,我认为您需要研究一下如何设置表格,使其以您希望的方式显示数字。或者,编写您自己的表显示函数,使用上面提到的sprintf
,并按您希望的方式打印所有数据。好的,谢谢。我想我将只处理引号,因为我不想真正开始构建我自己的表函数。@alexanderd5398:似乎意味着不可能更改表的输出格式。他们建议把你输入表格的数字四舍五入,但我不认为这只会给你小数点后一位。是的,我看过了,但因为我显示的一些数字非常小,而一些大约是0.1,所以小的数字只显示为零。我永远无法得到一致的格式。
a = cell(19,1);
%...
a{i-1} = sprintf('%.1e', w);