【问题标题】:Is there any way to convert a float into an int without losing the decimal values?有没有办法将浮点数转换为 int 而不会丢失十进制值?
【发布时间】:2016-04-17 23:04:33
【问题描述】:

我正在尝试将浮点值转换为整数,修改 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;

【问题讨论】:

  • 为什么不把浮点值的整数表示保存到另一个变量中呢?然后你会保留原来的,仍然有你想要的 int 值。
  • 乘以某个因子得到固定的小数int表示。
  • 为什么要转换为 int 呢?如果您想要浮动,请将其保留为浮动。
  • 我会先打开一本字典,然后查找“整数”这个词的含义。
  • 你想做什么? (那么包含此代码的函数的名称是什么?)将两个浮点数相乘比f1 * f2 更快?在这种情况下,你甚至不应该考虑对数。

标签: c++ floating-point int type-conversion


【解决方案1】:

位移不适用于浮点值,因为位的布局不同。他们必须保留小数位置以及数字(因此是浮点“点”值)。

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

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

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

【讨论】:

    猜你喜欢
    • 2014-03-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2011-03-05
    • 2014-11-24
    相关资源
    最近更新 更多