将表示位置的整数分解为多个部分,然后再返回

Breaking an integer, representing position, into parts and back again

本文关键字:个部 然后 返回 位置 表示 整数 分解      更新时间:2023-10-16

我正在使用一些表示电机绝对位置的硬件,使用无符号整数。规格告诉我,一位数字代表100nm。

值 100,000 则为 <=> 10mm,即 100,000 x 100== 10,000,000 nm <=> 10mm。

对于对电机进行精细控制的用户来说,处理如此大的数字是不切实际的。所以我用它的mm,um和nm部分来呈现这个数字。我可以得到那些作为

//Input number x 100 -> value in nm
unsigned int nmVal = input * 100;
unsigned int mmValue = (nmVal / 10000000 % 10) * 10  + (nmVal / 1000000 % 10);
unsigned int umValue = (nmVal / 100000 % 10) * 100 + (nmVal / 10000 % 10) * 10 + 
(nmVal / 1000 % 10);
unsigned int nm = (nmVal / 100 % 10) * 100;

我可以在三个编辑框中将它们在 UI 中显示为 mmValue + umValue + nmValue。

然后,用户可以轻松修改nm部件,而无需担心其他部件。

问题是,如何在不使用双精度的情况下从"部分"到代表位置的整数?

如果我只是将数字相加,即

int position = mmVal * 1e-3 + umVal*1e-6 + nmVal*1e-9

可变位置将为零。

反之亦然:

position_t nmPos = mmVal * 1e6 + umVal * 1e3 + nmVal;

相关文章: