• Status: Solved
• Priority: Medium
• Security: Public
• Views: 1439

# C++ round to n places

Hi experts,
I have two related questions:

(A)
I would like to know if there is a fuction to round double values to n decimal places e.g.

double value = 0.000000000234567897

value = round(value, 12) // now value is 0.000000000235 i.e to 12 decimal places

(B)
How do I watch a double value to n decimal places in visual studio c++. When I hover over a double variable I can only see up to 6 or 7 decimal places?

Thank you,
j

0
XPUSR
• 3
• 2
• 2
• +2
1 Solution

Commented:

you could multiply the number by 10^places, truncate it to an integer, then divide by 10^places.

0

Commented:
or you could include the following:

#include <iostream>
#include <iomanip>
using namespace std;

and then use manipulator setprecision(int t);

which will round your number at first t-1 decimal positions.

for example:

double x = 1.23456789;
cout << setprecision(4) << x;

will print 1.234.

Howerever, when numbers are small like your double value, then compiler will
use exponential notation for example 2.346 e-010 (in this case), where
"first number" is rounded at t-1 decimal places.

so:

double value = 0.00000000023456789;
cout << setprecision(4) << value;

will print 2.346 e-010.
0

Commented:
Sorry about a little mistake, in those t positions are counted digits both after and before point.
You can see complete explanation here.

http://www.cplusplus.com/ref/iostream/iomanip/setprecision.html
0

Author Commented:
Thanks very much but I cannot use cout as I am in a COM environment. Is there another way?

Also,

double TeamAScore1 = 7.00;
double TeamAScore2 = 7.02;
double performace = (TeamAScore2 /TeamAScore1) - 1;

If I debug the code above I get a value of "0.0028571428571429" in the watch window for the performance variable, however if I do the following:

double endperformace = performace - 0.0028571428571429;

the endperformace variable is not 0 but "-8.6736173798840e-018". Can anyone explain this?

0

Author Commented:
Is there a mehod of outputing data to n decimal places to the visual c++ output window?
0

Commented:
Hello, give this a shot:

double value = 0.000000000234567897;
double rounded;
int n = 12;
rounded = System::Math::Round(value, n);
MessageBox::Show("value: "+value+"\nrounded: "+rounded);

For Round() use the 4th function of it (4 of 8). The default will round to the nearest integer. The 4th rounds to desired precision.
0

Commented:
0

Author Commented:
>> YoungBonzi
I think the System::Math::Round is a .NET method. I can't seem to get it to work for non .Net apps?
0

Commented:
For the rounding:

float RoundUp(float Value, int Places)
{
float tmp = 0.0;
int hold = 0;
hold = (int)(Value * (float)pow(10, Places) + 0.5);
tmp = (float)hold / (float)pow(10, Places);

return tmp;
}

As for long numbers, the best I can come up with is to store your entire number in an advanced double array. Meaning each increment in the array stores the value of data to a further percision (or maybe some simple short array with one single digit value for each percision).
0

## Featured Post

• 3
• 2
• 2
• +2
Tackle projects and never again get stuck behind a technical roadblock.