рассчитать цифры / десятичные разряды от разрешения - PullRequest
0 голосов
/ 25 октября 2018

Есть ли простой способ рассчитать количество цифр, необходимое для отображения числа с плавающей запятой с заданным разрешением?(Без преобразования строк)

resolution = [0.1 0.01 0.05 0.025 0.10001];

% first try
digits = -floor (log10 (resolution))

% wanted output
ex_digits = [1 2 2 3 5];

дает

digits =
   1   2   2   2   1

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

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Кажется, что-то вроде этого достаточно близко:

ceil( log10( [~, D] = rat( resolution, eps ) ) )
0 голосов
/ 25 октября 2018

Вы можете умножить число на 10 и сравнить результат с его полом.

resolution = [0.1 0.01 0.05 0.025 0.10001];
k = resolution .* 10.^(1:20).';
[~, digits] = max(round(k)==k);

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

r = round(k);
tol = eps(r) * 2;
[max_val, digits] = max(abs(r-k) < tol);
digits = max_val .* digits + ~max_val .* 20;
...