2015-12-28 2 views
-2

В приведенном ниже коде, когда я вхожу ввод как 0.41 я получить результат, как 4, которая, как ожидается, но когда я вхожу ввод как 0.15 тогда я получаю результат, как 3, но должно быть 2.Неожиданный результат, потому что поплавок вычитание становится -0.0 и +0.0

Я знаю причину, потому что мой самый первый if состояние не становится true, и это имеет отношение к -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); 
    } 
} 
+2

Что заставляет вас думать, что проблема связана с отрицательным нуля? –

+0

@JohnBollinger I напечатал значения, а в случае '0.15' я вижу' 0,0000', а первый IF не запускается, когда я вхожу в '0.41', тогда я вижу' -0.000' и ​​первый IF запускается. – hagrawal

+1

Пожалуйста, разместите полный код. Нет 'FloatInput()' –

ответ

1

Вы терпите приращение count при подсчете пенни.

Например:

} else { 
     f1 = f1 - 0.01; 
     count++; // count pennies 
    } 
+0

Это не поможет, потому что проблема не в подсчете, а в том, что условие не выполнено. – hagrawal

Смежные вопросы