c++ - 区分带小数位的数字(double 类型)和不带小数位的数字 - C++

标签 c++ integer double rounding

我正在尝试用 C++ 实现一个简单的抽取算法。我有两个数组,比如 pq,其中下标通过以下关系相互关联:

p[k] = q[0.5*k]。这意味着以下序列应该有效:

p[0] = q[0]  
p[1] = 0  
p[2] = q[1]  
p[3] = 0  
p[4] = q[2]  

等等……

请注意,p[k] 仅在 (0.5*k) 的结果不包含小数位(或小数位为 0)时才取值) 并且不使用任何四舍五入等。

我的问题是:有没有一种方法可以区分整数(没有小数位的数字或十进制中只有 0,比如 2.0)和 C++ 中有小数位的数字,前提是两者被加倍?

eg.) 2.0 是一个转换为 double 的整数。 2.1是带小数位的数字。
例如。 2) * 0.9*2 应该将 0 放入数组 p 而 0.9*10 应该将 q[9] 放入数组 p.*

如果我使用语句 (int) (0.5*k),那么无论 k 的值如何,我最终都会得到一个整数。

编辑:上述案例中的 0.5 只是说明性的。它可以是任何数字,例如 2、2.5、0.9、0.95 等)

欢迎任何帮助,
谢谢,
斯里拉姆。

最佳答案

假设 k 是整数类型,您可以使用 if (k % 2 == 0) ... 来检查 k能被二整除:

if (k % 2 == 0)
  p[k] = q[k / 2];
else
  p[k] = 0;

这也可以用三元运算符表示:

p[k] = (k % 2 == 0) ? q[k / 2] : 0;

关于c++ - 区分带小数位的数字(double 类型)和不带小数位的数字 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5417752/

相关文章:

java - Android 两个具有相同值的整数不正确相等

c++ - 将 C++ dll 注入(inject)器转换为 unicode

c++ - 针对编译时间优化的 STL 版本?

C++:访问祖 parent 方法

c++ - double 和 peridoc 小数

java.lang.NumberFormatException : Invalid double: "" Edit Text 异常

swift - 在 swift 中比 double 更精确

c++ - 遇到非法内存访问

java - 使用 Integer[] 与 int[]

C printf整数类型U32