首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >区分带有小数位的数字和没有- c++的数字(类型为双)。

区分带有小数位的数字和没有- c++的数字(类型为双)。
EN

Stack Overflow用户
提问于 2011-03-24 10:30:10
回答 6查看 1.1K关注 0票数 3

我试图在c++中实现一个简单的抽取算法。我有两个数组,比如p & q,其中下标通过以下关系相互关联:

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

代码语言:javascript
代码运行次数:0
运行
复制
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++中小数位数,前提是两者都转换为双数?

2.0是一个整数转换成双倍。2.1是一个小数位数。

例如:2) * 0.9*2应将0放入数组p,而0.9*10应将q9放入数组p。

如果我使用语句(int) (0.5*k),那么在每种情况下我都会得到一个整数,而不管k的值如何。

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

任何帮助都是最受欢迎的,

谢谢,

斯里拉姆。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-24 10:47:02

假设主厨可以是其他任何东西,

代码语言:javascript
代码运行次数:0
运行
复制
p[floor(coef*k)] = (fabs(coef*k-floor(coef*k))<1E-6)?q[k]:0;
票数 2
EN

Stack Overflow用户

发布于 2011-03-24 10:32:21

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

代码语言:javascript
代码运行次数:0
运行
复制
if (k % 2 == 0)
  p[k] = q[k / 2];
else
  p[k] = 0;

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

代码语言:javascript
代码运行次数:0
运行
复制
p[k] = (k % 2 == 0) ? q[k / 2] : 0;
票数 3
EN

Stack Overflow用户

发布于 2011-03-24 10:35:09

您想要做的事情的简短语法可以是:

代码语言:javascript
代码运行次数:0
运行
复制
p[k] = k % 2 ? 0 : q[k/2];

在C++中有区分整数和整数的方法吗?

定义整数,并在此上下文中定义整数。我很困惑!

你是否接受了解释这里?的差异?

如果要检测数字是否为整数,则这可能会有所帮助:

代码语言:javascript
代码运行次数:0
运行
复制
#include<cmath>

bool IsInteger(double d)
{  
    double intpart;
    return std::modf(double number, &intpart) == 0.0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5417752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档