从分辨率计算数字/小数位

时间:2018-10-25 07:00:43

标签: matlab octave

是否有一种简便的方法来计算以给定分辨率显示浮点数所需的位数? (无需进行字符串转换)

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 :(得分:4)

您可以将数字乘以10的幂,然后将结果与其下限进行比较。

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

您还可以使用公差来考虑精度误差:

max(abs(floor(k)-k) < tol)

答案 1 :(得分:3)

像这样的事情似乎已经足够接近了:

ceil( log10( [~, D] = rat( resolution, eps ) ) )