C 意外结果,因为浮点减法变为-0.0和+;0
在下面的代码中,当我以C 意外结果,因为浮点减法变为-0.0和+;0,c,floating-point,C,Floating Point,在下面的代码中,当我以0.41的形式输入时,我得到的结果是4,这是预期的,但当我以0.15的形式输入时,我得到的结果是3,但它应该是2 我知道原因,因为我的第一个if条件不是真的,这与-0.0和+0.0有关。我无法理解这一切是如何发生的。整个差异是输入为0.41和0.15 #include <stdio.h> #include <math.h> void performMath(float); int count = 0; int main(void){ pr
0.41
的形式输入时,我得到的结果是4
,这是预期的,但当我以0.15
的形式输入时,我得到的结果是3
,但它应该是2
我知道原因,因为我的第一个if
条件不是真的,这与-0.0和+0.0有关。我无法理解这一切是如何发生的。整个差异是输入为0.41
和0.15
#include <stdio.h>
#include <math.h>
void performMath(float);
int count = 0;
int main(void){
printf("Enter dollars\n");
float userInput = FloatInput(); //FloatInput() is just a method to get user input.
float* ptr = malloc(sizeof(float));
float cents = modff(userInput, ptr);
performMath(cents);
}
void performMath(float f1){
printf("performMath : %f\n", f1);
if(f1 <= 0.0){ //It fails in this condition when user input is 0.15.
printf("Change is: %i\n", count);
} else{
if((f1 - 0.25) >= 0.0){
f1 = f1 - 0.25;
count++;
} else if((f1 - 0.10) >= 0.0){
f1 = f1 - 0.10;
count++;
} else if((f1 - 0.05) >= 0.0){
f1 = f1 - 0.05;
count++;
} else { // Even if I user "else if((f1 - 0.01) >= 0.0)" and f1 is 0.01 then also flow doesn't enter this condition.
f1 = f1 - 0.01;
count++;
}
performMath(f1);
}
}
#包括
#包括
无效性能(浮动);
整数计数=0;
内部主(空){
printf(“输入美元”);
float userInput=FloatInput();//FloatInput()只是一个获取用户输入的方法。
浮动*ptr=malloc(sizeof(浮动));
浮动美分=modff(用户输入,ptr);
性能(美分);
}
无效性能规格(浮动f1){
printf(“性能规格:%f\n”,f1);
如果(f1=0.0){
f1=f1-0.25;
计数++;
}如果((f1-0.10)>=0.0),则为else{
f1=f1-0.10;
计数++;
}如果((f1-0.05)>=0.0),则为else{
f1=f1-0.05;
计数++;
}else{//即使我使用“else if((f1-0.01)>=0.0)”并且f1是0.01,那么流也不会进入这个条件。
f1=f1-0.01;
计数++;
}
性能(f1);
}
}
当你数硬币时,你不能递增计数
例如:
} else {
f1 = f1 - 0.01;
count++; // count pennies
}
你凭什么认为这个问题与负零有关?@JohnBollinger我打印了数值,如果是
0.15
,我看到0.0000
,首先如果没有执行,而当我输入0.41
时,我看到-0.000
,首先如果执行了。请发布完整的代码。没有FloatInput()
@WeatherVane:FloatInput()只是获取用户输入的方法。我对问题进行了编辑以澄清问题。既然您提出了一个问题,您如何知道错误在哪里?请张贴这将不会有帮助,因为问题不是关于计数,而是关于不满足的条件。。