从双精度转换为整数时的值更改
Value changing when converting from double to int
基本问题,代码非常大,但我的问题是,从本质上讲,它是基本的:
我有一个称为变量的双精度值,如果我使用 cout <<变量检查它,它会给我,例如,982。
下一行代码是 int intvariable = variable。
然后,当我用 cout <<intvariable 检查它时,我得到了 981。
有趣的是,这并不总是发生。对于 985,它可能保持在 985,但随后在 984 和 983,它将返回 983 和 982。我似乎根本无法弄清楚这一点。我尝试将其转换为浮点数,然后转换为整数,或转换为另一个双精度然后转换为整数。
我需要它作为 int,这样我就可以对它使用模运算符。
我应该指出,以前在代码中,双精度小于 1(即 0.987),然后乘以小数位数以使其成为真正的正整数(尽管,它在这一点上存储为双精度)。也许这与随机四舍五入有关?
将浮点值强制转换为int
将截断(返回该值的下限),这可能会导致您的问题,因为浮点数本质上是不精确的。尝试对数字进行四舍五入,即 intvariable = (int)(0.5 + variable)
.您可能还对 fmod
函数感兴趣,该函数计算浮点除法的余数(请参阅 http://www.cplusplus.com/reference/cmath/)。
相关文章:
- 我可以信任表示整数的浮点或双精度来保持精度吗
- C 字符串返回字符串的整数/双精度/长整型值
- 如何防止双精度值到整数的隐式转换
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 为什么输出是整数而不是双精度?
- 从字符串转换为双精度和整数 - C++
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- C++,遇到将双精度转换为整数的问题
- 用双精度除以整数
- 使用整数初始化列表初始化长双精度的向量
- 如何判断 c++ 向量中的值类型(整数或双精度)?
- 了解双精度转换与整数转换中的整数与截断关系
- 为什么使用 int64_t 会产生错误的结果,而双精度则按预期进行简单的整数乘法
- 将双精度与整数进行比较
- 64 位整数到双精度冲突
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- 不确定输出双精度或整数的代码行
- 将 32 位浮点数和不强制转换的 32 位整数与双精度进行比较,当其中一个值可能太大而无法完全适合另一种类型时
- 使用 sprintf 格式化负整数/双精度
- 在c++中是否有一种方法可以将这种格式的输入限制为整数/双精度