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

那么100,000的值 10mm,因为100,000 x 100 == 10,000,000 nm 10mm。

对于用户来说,要对电动机进行精细控制,以如此大的数量工作是不现实的。所以我用毫米,微米和纳米的部分来表示数字。我可以得到那些

//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;


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

然后,用户可以轻松修改nm部分,而不必担心其他部分。

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

如果我只加数字,即

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


可变位置将为零。

最佳答案

那是另一种方式:

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

关于c++ - 将代表位置的整数分解为多个部分,然后再次返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44167237/

10-10 16:02