Почему MATLAB удалил мои десятичные дроби?

предположим, я создаю некоторое число A, приказа 10^4:

A = 81472.368639;
disp(A)
   8.1472e+04

это не то, что я хотел. Где мои десятичные дроби? Должно быть еще шесть десятичных знаков. Проверка редактора переменных показывает мне следующее:

Variable editor

опять я потерял десятичные дроби. Как сохранить их для дальнейших расчетов?

1 ответов


научная нотация, или почему вы не потеряли десятичные дроби

вы не потеряли десятичных знаков, это просто способ отображения больших чисел MATLAB. MATLAB округляет отображение чисел как в командном окне, так и в Редакторе переменных до одной цифры перед точкой и до четырех после нее, используя научную нотацию. Научная нотация-это Xe+y нотации, где X - некоторое число, а y целое число. Это значит X времени 10 к власти y, который можно визуализировать как " сдвиньте точку вправо для y места" (или влево, если y отрицательный).

заставить MATLAB показать вам все ваши десятичные дроби

теперь, когда мы знаем, что делает MATLAB, можем ли мы заставить его показать нам наш номер? Конечно, есть несколько вариантов для этого, самый простой-установить более длинный format. Наиболее часто для отображения длинных чисел используются format long и format longG, чья разница очевидна, когда мы их использовать:

format long
A

A =

     8.1472368639e+04

format longG
A

A =

          81472.368639

format long отображает все десятичные дроби (до 16 всего) с использованием научной нотации,format longG пытается отобразить числа без научной нотации, но с большинством доступных десятичных знаков, снова: столько, сколько есть или до 16 цифр, как до, так и после точки, в общей сложности.

более причудливое решение использует disp(sprintf()) или fprintf если вы хотите точное количество десятичных знаков перед точкой, после точки или оба:

fprintf('A = %5.3f\n',A) % \n is just to force a line break
A = 81472.369
disp(sprintf('A = %5.2f\n',A))
A = 81472.37

наконец, помните редактор переменных? Как сделать так, чтобы переменная полностью отображалась? Просто: нажмите на ячейку, содержащую номер:

Variable editor after clicking

короче говоря: мы не потеряли десятичных знаков по пути, MATLAB все еще хранит их внутри, он просто отображает меньше десятичных знаков по умолчанию.


другие виды использования format

format имеет еще одно хорошее свойство в том, что вы может установить format compact, который избавляется от всех дополнительных пустых строк:

format compact
format long
A
A =
     8.147236863931789e+04
format longG
A
A =
          81472.3686393179

что, на мой взгляд, очень удобно, когда вы не хотите делать свое командное окно очень большим, но не хотите прокручивать много.

format shortG и format longG полезны, когда Ваш массив имеет очень разные цифры в них:

b = 10.^(-3:3);
A.*b
ans =
   1.0e+07 *
    0.0000    0.0001    0.0008    0.0081    0.0815    0.8147    8.1472
format longG
A.*b
ans =
  Columns 1 through 3
              81.472368639              814.72368639              8147.2368639
  Columns 4 through 6
              81472.368639              814723.68639              8147236.8639
  Column 7
              81472368.639
format shortG
A.*b
ans =
       81.472       814.72       8147.2        81472   8.1472e+05   8.1472e+06   8.1472e+07

т. е. они работают как long и short на одиночных числах, но выбирает самый удобный формат дисплея для каждого из числа.

есть еще несколько экзотических вариантов, как shortE, shortEng, hex etc, но те, которые вы можете найти хорошо документированы в собственная документация по математике на format.