有没有什么方法可以在不丢失十进制值的情况下将浮点值转换为int值

Is there any way to convert a float into an int without losing the decimal values?

本文关键字:情况下 int 转换 十进制 方法 什么 有没有      更新时间:2023-10-16

我正在尝试将浮点值转换为整数,修改int值,然后重新转换回浮点值。然而,小数的值会丢失,我确信我使用了static_cast<>()函数在我的代码中出错。

我的代码是一个二进制乘法器,它将二进制值向左移动f次。例如,当我做1.2 x 2这样的事情时,我只得到2,而不是2.4。

int mantissa;
int f;
int exp;
float result = mantissa + 0x800000;
int resultInt = static_cast<int>(result);
int expF = log2(abs(f));
int expM = exp + expF;
int newExp = (127 + 23 - expM);
resultInt >>= newExp;
float result2 = resultInt;

位移位对浮点值无效,因为位的布局不同。它们必须保留小数位置和数字(因此是浮点值)。

另一方面,整数可以很好地进行位移位,因为它从十进制映射到二进制,但不会在任何地方存储小数点。因此,在铸造时,您会丢失这些信息。

简言之,不可能像使用整数那样直接使用移位来乘以十进制值。

但是,您可以将浮点乘以10,直到所有数字都在小数的左侧,然后转换为整数。它可能会消耗性能,这取决于它的实现方式,但以这种方式保存所有信息是肯定可能的。如果不了解你的意图,很难回答除此之外的问题。

相关文章: