我需要编写一个C程序,该程序将比较小数点前和小数点后的位数,并确保它们相等。

我如何计算小数点前后的十个整数的幂?

这是我到目前为止的内容:

void main()
{
    is_equal(6757.658);
}

INT is_equal(double x)
{
   int digits = 0;
   while (x) {
     x /= 10;
     digits++;
   }

   printf("%d ",digits);
}


有一个更好的方法吗?

最佳答案

第三次尝试:

计算“。”之前和之后的“数字”数。


空值被认为不等于任何东西
我没有测试此代码,它可能包含错别字。

int is_equal(char *buffer)
{
  char *temp;
  int leftLen,rightLen;

  temp = strtok(buffer,".");
  if (temp == null) return false;

  leftLen = strlen(temp);

  temp = strtok(buffer,".");

  if (temp == null) return false;

  rightLen = strlen(temp);

  return (leftLen == rightLen);
}





老东西...

这里会有很多问题,C中的浮点数(双精度)并不总是精确到100%。如果执行乘法或除法。如果相乘,数字将改变。

解决此问题的最佳方法是将double呈现为字符串,然后解析该字符串。

您可以使用sprintf将格式化的double写入缓冲区。

要么

您可以一起跳过使用double并使用字符串开头。

因此,基于Marcelo的答案:

从用户读取字符串到名为buff的缓冲区

然后使用类似sscanf(buf, "%d.%d", &a, &b);的语句进行解析

buff是char *char []abint。您说a == b进行测试

void main()
{
  is_equal("6757.658");
}

int is_equal(char *x)
{
   int left,right;

   sscanf(x, "%d.%d", &left, &right);

   printf("Left digits: %d\n\r",left);
   printf("Right digits: %d\n\r",right);

   return (left == right);
}

关于c - 计算C中小数点前后的位数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8464131/

10-11 17:53