有没有什么方法可以在不丢失十进制值的情况下将浮点值转换为int值
Is there any way to convert a float into an int without losing the decimal values?
我正在尝试将浮点值转换为整数,修改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,直到所有数字都在小数的左侧,然后转换为整数。它可能会消耗性能,这取决于它的实现方式,但以这种方式保存所有信息是肯定可能的。如果不了解你的意图,很难回答除此之外的问题。
相关文章:
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 在这种情况下,int**在C中是什么意思
- 如何在不返回 C++ 值的情况下退出 int 函数?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 如何对 int 变量应用验证,使其仅接受整数数据,并且在任何其他数据的情况下不会出错?
- 无符号 int 与无符号长 两者都是 32 位,但我无法在不转换的情况下混合它们......为什么?
- 如何在没有参数的情况下实现返回双向链表大小的函数?int size() const.
- <int> 在不破坏堆栈的情况下获取 C++ 中的堆栈总和
- 为什么在这种情况下使用 int *arr = new int [number]
- 在 int 数组的情况下,新表达式可以"overflow"吗?
- 如何在不复制的情况下更新 std::unordered_map<std::string, std::vector> 中的向量<int>?
- 如何在不使用堆栈或数组的情况下从INT中提取每个数字?(C )
- 读取即将在没有同步的情况下同时增加的int是安全的吗?
- 在没有初始化列表的情况下,在c++的headerfile中为const int赋值
- 如何在<int>不重建数组的情况下将 vector<vector> 转换为 int**?
- 在 priority_queue 内部 pair<int、int> 的情况下决定优先级?
- 有没有什么方法可以在不丢失十进制值的情况下将浮点值转换为int值
- 为什么两种情况下的行为不同1.int i=1,2,3;和第二.int i;i=1,2,3;
- 开关情况下的字符和 int 有什么区别?
- 在这种情况下,静态 int 的值会发生变化吗?