2015-11-10 3 views
0

Я написал функцию, которая имеет толерантность как один из ее входов, и мне интересно, как установить выход с тем же числом десятичных знаков, что и допуск? Я знаю, что вы можете использовать sprintf для установки числа десятичных точек, но я не могу решить, как установить его равным тому же количеству десятичных точек, что и в моем допуске. Я хочу, чтобы он округлился до определенной степени, заданной tol, который является входом. Поэтому, если я ставлю допуск как 0.001, это то, что я хочу, и это то, что мне сложно сделать.Имейте переменную длину вывода в Matlab

+3

Если вы хотите, чтобы ваш ответ, округленный до определенного (скажем 'd') количество цифр, то вы всегда можете закончить функцию с' ответ = round (ответ * 10^d)/(10^d) '. –

+0

Начиная с R2014b, вы также можете просто выполнить ответ: round = ответить (ответить, d) ' – Will

ответ

1

Просто используйте round, он имеет эту функциональность, встроенную:

round(4.235,2) 
ans = 
     4.23 
+0

С оговоркой, что эта функциональность была добавлена ​​в' round' в [R2014b] (http://www.mathworks.com/help/ Matlab/релиз-notes.html # R2014b). – excaza

0

округление до ближайшей единицы данного допуска, разделить по этой терпимости, округление до ближайшего целого числа и умножить результат на первоначальный допуск:

round(x/tol)*tol 

Если вы имеете в виду предположить, что tol представляет собой целое число знаков после запятой, вы можете определить, что номер с log10:

places = round(-log10(tol)); 

Вы можете использовать этот результат непосредственно в sprintf:

output = sprintf('%.*f', places, x); 
Смежные вопросы