Поскольку вы строго говорите, что не хотите округлять число, вот одно из возможных решений с floor
, где я просто опускаю числа после указанных десятичных чисел N
, которые я хочу сохранить:
function trunc = truncate(x,N)
trunc = floor(x*10^N)/10^N;
end
Вот пример запуска:
>> b=rand(1,2)
b =
0.957166948242946 0.485375648722841
>> truncate(b,3)
ans =
0.957000000000000 0.485000000000000
Обратите внимание, что если вы рассматриваете числа больше единицы, вышеприведенная функция должна быть немного изменена:
function trunc = truncate(x,N)
%For numbers equal or greater than 1, getting N first digits
trunc=x;
idx = x>=1;
trunc(idx) = floor(x(idx)/10^N);
%For decimals, keeping N first digits after comma
trunc(~idx) = floor(x(~idx)*10^N)/10^N;
end
Еще один запуск функции truncate
:
>> b=[123 rand(1,2)]
b =
1.0e+02 *
1.230000000000000 0.004217612826263 0.009157355251891
>> truncate(b,2)
ans =
1.000000000000000 0.420000000000000 0.910000000000000
Важно отметить, что не было сделано никаких проверок, чтобы проверить, действительно ли входные данные для функции содержат количество цифр, превышающее N, что я предположил как верное.
person
brodoll
schedule
10.06.2015