отформатировать число как я хочу - PullRequest
2 голосов
/ 03 ноября 2011

У меня есть номер: a = 3.860575156847749e+003;, и я бы показал его обычным способом.Поэтому я пишу b = sprintf('%0.1f' a);.Если я напечатаю b, я получу: 3860.6.Это потрясающе.Фактически, в то время как a является двойным типом, b был преобразован в char.

Что я могу сделать, чтобы правильно отформатировать это число и в конечном итоге иметь число в качестве результата?

С уважением

Ответы [ 2 ]

5 голосов
/ 03 ноября 2011

Что ж, вы должны различать как числовое значение (число, хранящееся в памяти вашего компьютера), так и его десятичное представление (массив строк / символов, который вы видите на экране). Вы не можете навязать формат числу: число имеет значение, которое может быть представлено в виде строки различными способами (например, 1234 = 1.234e3 = 12.34e2 = 0.1234e4 = ...).

Если вы хотите сохранить число с меньшей точностью, вы можете использовать round, floor, ceil для вычисления числа, которое имеет меньшую точность, чем исходное число. Например. если у вас есть a = 3.860575156847749e+003 и вы хотите, чтобы число состояло только из 5 значащих цифр, вы можете сделать это, используя round:

a = 3.860575156847749e+003;
p = 0.1; % absolute precision you want
b = p .* round(a./p)

Это даст переменную b = 3.8606e3, которая может быть представлена ​​различными способами, но должна содержать нули (на практике: очень маленькие значения иногда неизбежны) после пятой цифры. Я думаю, что это то, что вы на самом деле хотите, но помните, что для компьютера это число равно 3.86060000 (это просто еще одно строковое представление того же значения), поэтому я хочу еще раз подчеркнуть, что десятичное представление не устанавливается путем округления числа, но (неявно) вызывая функцию, которая преобразует double в строку, что происходит либо с помощью sprintf, disp, либо, возможно, некоторыми другими функциями.

0 голосов
/ 03 ноября 2011

Результат sprintf ya текстовой переменной.Вы пытались объявить переменную как целое число (например) и использовать ее как возвращаемое значение для инструкции sprintf?

Это может быть полезно для вас: http://blogs.mathworks.com/loren/2006/12/27/displaying-numbers-in-matlab/

...