help needed in a c program

here is a given c program which rounds off the floating value.



This job is to have the return amount in both calls to return 1.32.

Now the 1.324 returns 1.32000001..this is not acceptable, this must return the correct rounding values.




//***************************************************************//
//***************************************************************//
void TestTax()
{
float Tax_Amt1 = 1.324;
float Tax_Amt2  =1.325;
float Ret_Amt;

    Ret_Amt = Round_Money(Tax_Amt1);
    Ret_Amt = Round_Money(Tax_Amt2);
}
//***************************************************************//
//***************************************************************//
float Round_Money(float In_Amt)
{
char temp1[32];
char temp2[32];

float Ret_Amt;

int t1,t2;
float r1,r2;
int v1,v2;

int t=0;

    sprintf(temp1,"%.3f",In_Amt);
    In_Amt = atof(temp1);

    t1 = abs(In_Amt);
    r1  = In_Amt - t1;

    sprintf(temp1,"%.03f",r1);
    
    temp2[0] = temp1[4];
    temp2[1] = 0;
    v1 = atoi(temp2);

    r2 = atof(temp2);

    sprintf(temp1,"%.2f",In_Amt);
    temp1[4] = '0';
    In_Amt = atof(temp1);


    if(v1 > 4)
    {
        In_Amt = In_Amt +.01;
        sprintf(temp1,"%.2f",In_Amt);
        Ret_Amt = atof(temp1);
    }
    else
    {
        sprintf(temp1,"%.2f",In_Amt);
        Ret_Amt = atof(temp1);

    }

    return Ret_Amt;
}

i am not able find the problem here..can you please help me out. it needs to round off 1.324 and 1.325 to 1.32

Replies

  • pradeep_agrawal
    pradeep_agrawal
    rohitvishnu, in the given code you are converting the value to a required precision using format specifiers. But again you are storing the result in a float variable.

    Due to the way a float or double value gets stored in memory, its not possible to store all numbers with correct precision in memory. There may be loss of some precision.

    In your case when you store 1.32 into memory, there is some loss of precision and hence you are not getting the exact value.

    Try the below code:
    #include "stdio.h"
    
    int main() {
      float f = 1.32;
      printf("Value Stored in memory: %64.63e\n", f);
      return 0;
    }
    
    The output of the code is:

    Value Stored in memory: 1.320000052452087402343750000000000000000000000000000000
    000000000e+00

    Though we have assigned value 1.32 to a float variable, the output is not exactly 1.32 (output specify the value stored in the memory with loss of some precision).

    But you can use workarounds to avoid such issues, e.g.,
    1. If you want to output the value, use format specifiers as you used in your code.
    2. If you want to compare value then make sure that the two values to be compared are of same type (e.g., compare float with float and double with double).

    PS: For more details on representation of variable in memory and loss of precision in floats and doubles refer post:
    #-Link-Snipped-#

    Let mew know if any item need more clarification.

    -Pradeep
  • ashutoshglamour
    ashutoshglamour
    what is SPRINTF?
  • pradeep_agrawal
    pradeep_agrawal
    Hi ashutoshglamour, instead of posting new query in any existing thread please start a new thread for new query.

    -Pradeep
  • ashutoshglamour
    ashutoshglamour
    pradeep_agrawal
    Hi ashutoshglamour, instead of posting new query in any existing thread please start a new thread for new query.

    -Pradeep
    sorry but this question is related one.😁
  • pradeep_agrawal
    pradeep_agrawal
    I just forgot that the function sprintf is being used in the code given in the first post of the thread. My apologies.

    If you would have mentioned the context while posting the query that might have helped 😀

    Anyway, coming back to original query.

    sprintf is a C function similar to printf, i.e., it formats the value and output the value.

    The difference wrt printf is that printf function output the result of formatting to output string, whereas sprintf output the result in the provided string buffer, e.g.,

    The given code has a sprintf statement as:
    sprintf(temp1,"%.3f",In_Amt);
    where them1 is a character array of size 32 (string buffer). When the statement is executed, it represent the value of variable In_Amt as per the given format specifier "%.3f" and store the formatted string in temp1.

    Let me know if any point need more clarification.

    -Pradeep
  • ashutoshglamour
    ashutoshglamour
    pradeep_agrawal
    I just forgot that the function sprintf is being used in the code given in the first post of the thread. My apologies.

    If you would have mentioned the context while posting the query that might have helped 😀

    Anyway, coming back to original query.

    sprintf is a C function similar to printf, i.e., it formats the value and output the value.

    The difference wrt printf is that printf function output the result of formatting to output string, whereas sprintf output the result in the provided string buffer, e.g.,.



    The given code has a sprintf statement as:
    sprintf(temp1,"%.3f",In_Amt);
    where them1 is a character array of size 32 (string buffer). When the statement is executed, it represent the value of variable In_Amt as per the given format specifier "%.3f" and store the formatted string in temp1.

    Let me know if any point need more clarification.

    -Pradeep
    thank you pradeep for clearfing my doubt.

You are reading an archived discussion.

Related Posts

Once all the scientists die and go to heaven............ They decide to play hide-n-seek.........Unfortunately Einstein is the one who has the den...........He is supposed to count up to 100...and then...
😛hello observers, Is there way of using sound energy to recharge our cell. At the time of talking on cell,our cell battery will be recharged by using our sound energy.This...
Source: Teach Yourself Programming in Ten Years Why is everyone in such a rush? Walk into any bookstore, and you'll see how to Teach Yourself Java in 7 Days alongside...
HI DEAR FRDS IAM RAHUL .IAM PERSUING MY ELECTRICAL AND ELECTRONIC ENGG FROM UTTAR PRADESH TECHNOLOGICAL UNIVERSITY . I NEED SOME ABOUT THE PROJECTS THAT CAN BE DONE IN THE...
Im just discussing a new idea of a project :: A mobile program that allows you to locate friends using the gps system and you can video call them using...