是否有一种简便的方法来计算以给定分辨率显示浮点数所需的位数? (无需进行字符串转换)
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
前三个结果很好,但另一个失败,我的第一次尝试。
答案 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 ) ) )