如何在 Matlab 中显示没有科学计数法的长数字?

Posted

技术标签:

【中文标题】如何在 Matlab 中显示没有科学计数法的长数字?【英文标题】:How to display long numbers without scientific notation in Matlab? 【发布时间】:2018-09-17 15:33:57 【问题描述】:

如何在Matlab中显示没有科学计数法的长数字?

format long g 没有帮助

>> A=single([1456267123000 16.5])
A =
  1×2 single row vector
    1.456267e+12            16.5
>> format long g
>> A
A =
  1×2 single row vector
    1.456267e+12            16.5

我希望这样的输出

    1456267123000           16.5

【问题讨论】:

你能举个例子说明你想要得到什么输出吗?您希望它在所有输出中或仅在表(或自定义类)中显示吗?如果它是自定义类,您应该能够覆盖其disp(或display,我不记得了)函数以使用所需格式的sprintf... 表格是 1x2 行向量,不是自定义类。它包含数字。我不想在没有指数(科学)符号的情况下显示所有数字。 【参考方案1】:

如果您可以只显示两位小数,您可以使用format bank

>> format long
>> pi*1e6
ans =
     3.141592653589793e+06
>> pi*1e25
ans =
     3.141592653589793e+25

>> format bank
>> pi*1e6
ans =
    3141592.65
>> pi*1e25
ans =
 31415926535897934939029504.00

或者使用更明确和灵活的sprintf 方法:

>> sprintf('%.7f', pi*1e6) % fixed-point, 7 decimals
>> disp(sprintf('%.7f', pi*1e6))
3141592.6535898

如果您只想显示结果也可以使用,如@Dev-iL 所述,

>> fprintf(1, '%.7f\n', pi*1e6) % fixed-point, 7 decimals
3141592.6535898

甚至

>> fprintf('%.7f\n', pi*1e6) % fixed-point, 7 decimals
3141592.6535898

【讨论】:

可以sprintf打印矩阵吗? @Dims 可以打印行向量:sprintf('%.7f ', [pi*1e6 1e9])。对于矩阵,您需要进行一些手动格式化【参考方案2】:

您可能想尝试mat2str,它允许您指定所需的精度位数,并且也适用于矩阵。例如:

>> mat2str(pi, 30)
ans =
    '3.14159265358979311599796346854'

>> mat2str([1456267123000 16.5], 20)
ans =
    '[1456267123000 16.5]'

【讨论】:

以上是关于如何在 Matlab 中显示没有科学计数法的长数字?的主要内容,如果未能解决你的问题,请参考以下文章

excel中长数字字符串会默认变成科学计数法,如何去除?

Matlab中如何获取科学记数法的指数

Matlab:在文本框中应用科学记数法

将 CSV 导入 MATLAB 的正确科学记数法

Matlab:在文本框中应用科学记数法

如何把excel中已显示为科学计数法的数值取消科学计数法