c - 如何在C中找出一个双数是否有小数点后的任何数字

标签 c algorithm decimal factorization

我在用 C 语言实现给定算法时偶然发现了一个问题:

int getNumberOfAllFactors(int number) {

  int counter = 0;
  double sqrt_num = sqrt(number);
  for (int i = 1; i <= sqrt_num; i++) {
      if ( number % i == 0) {
          counter = counter + 2;
      }
  }
  if (number == sqrt_num * sqrt_num)
      counter--;

  return counter;
}

– 第二个条件的原因 – 是对完全平方进行校正(即 36 = 6 * 6),但是它不会避免像这样的情况(误报):

sqrt(91) = 18.027756377319946
18.027756377319946 * 18.027756377319946 = 91.0

所以我的问题是:如何避免它以及 C 语言中确定双数是否有小数点后任何数字的最佳方法是什么?我应该将平方根值从 double 转换为整数吗?

最佳答案

在你的情况下,你可以这样测试它:

if (sqrt_num == (int)sqrt_num)

关于c - 如何在C中找出一个双数是否有小数点后的任何数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37129840/

相关文章:

c - 如何在C中分配矩阵行中的字母

c - 实现以下函数,将 float 的字符串表示形式转换为 double :

algorithm - tf-idf 和以前看不见的术语

java - 一个简单算法的实现(计算概率)

c# - 将 double 转换为 int 返回意外结果

java - 如何自定义四舍五入的形式

java - 为什么我的程序崩溃了(java)?

通过 execv() 调用 echo 打印额外字符

c - 如何在c中执行外部程序

java - 查找在二叉树中加起来总和的路由数