我需要编写一个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 []
,a
和b
是int
。您说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/