我正在寻找一种比较十进制值的第一个小数点的方法。 (-1.064728) 在我的项目中,我需要知道此十进制是否为0,但是我不知道该怎么做。 有人可以帮我吗。
答案 0 :(得分:3)
这是初学者解决此问题的最简单方法。 我的解决方案使用模运算符,该运算符可在除法运算后计算提醒。
因此,您将数字乘以10
,这意味着您将小数点向右推一位。这意味着您得到-10.64728。之后,将数字显式转换为整数,这将除去数字的小数部分,您将得到-10。
然后,您使用模运算符将给定数字除以10
,并返回除法的余数,在这种情况下为0
。
#include <stdio.h>
int main()
{
float con = -1.064728;
// This will put first decimal as last digit and remove all decimals
int res = (int) (con * 10);
// Take last digit of integer
res = res % 10;
if (res == 0) {
printf("Result is zero");
} else {
printf("Result is %d", res);
}
return 0;
}
此外,如果您需要使用大于整数最大范围十分之一的数字,我建议以字符串形式使用数字。这是最简单的解决方案。
#include <stdio.h>
int main()
{
char* c = "-1151651651651651781651.064728";
char result = '\0';
int i = 0;
// Check char on position `i`
while(c[i] != 0) {
// Check if current number is decimal delimiter
// Also check if next char is not end of string
if (c[i] == '.' && c[i+1] != 0) {
// Write next character as result and exit loop
result = c[i+1];
break;
}
// Increase iterator
i++;
}
if (result == '0') {
printf("Result is zero");
} else {
printf("Result is %c", result);
}
return 0;
}
如果您真的想在第二种情况下优化代码,我建议您删除迭代器整数并尝试滥用指针。
答案 1 :(得分:1)
double fraction = number - trunc(number);
int digit = 10 * fraction;
if (digit) { ... }
else { ... }
答案 2 :(得分:0)
float whole = floor(n);
float dec = n - whole;
if( dec == 0 ) { /*if decimal is zero*/}
else { /*if decimal is not zero*/}