Hey guys, this function is for rounding 2 decimal places, e.g. 1.2785 rounds to 1.2800. First, how would I alter the function so it would round 3 decimal places 1.2780, and second how would I truncate it so it would read 1.278.


double roundIt(double x, double n)  //Write definition for rounding function
    x = floor( x * pow(10.0, n) + 0.5) / pow(10.0, n);
    return x;

play around with the value of n and see what happens. In particular, try changing n from 1 to 2 to 3 etc. The function as written isn't specific for rounding to 2 decimal places.

Also, look into the stream manipulators, and here I'm thinking of the fixed and setprecision manipulators, to determine how many decimal points to display.

very helpful

Take into account that it's impossible to round decimal fractions accurately with binary floating point data ;)
Try to avoid pow function using: it's the most ineffective and inaccurate method in that case.

well at the first place i would recommend usage of float data type instead on double , guess float would do the trick.
second of all subtract the left part of the no from the original no itself , by doin this u can isolate the decimal part and then if u r looking for a 3 decimal round off in all the nos ( which apparently is ) .
u can multiply the 3 digits decimal into 100 and then round of them

float round( float no )
     int x, temp;
     float y;
     temp = x = no ;   only the integer part is taken 
     y = no -  x ; u get the decimal number here 
     y*=100 ; decimal gets converted to 2 digit no n 1 decimal
     x = y;
     y-= x;  the last decimal is stored in y 
     if( y > = 0.5 )
             x++ ;
    return (temp + x/100) ;

well i would like you to dry run the code .

very helpful

NEVER use float data type in math and financial calculations, it has too low precision. Standard C and C++ floating point type is double (have a look at <cmath> header contents).

Use modf library function to separate integer and fractional parts.

very helpful

thanks guys! I am trying to incorporate this in a weird kinda of assignment, I may need to get with you later. I will go ahead mark as solved. As always I throw myself at your wisdom! :icon_cheesygrin:

This question has already been answered. Start a new discussion instead.