What\'s the easiest way to truncate a C++ float
variable that has a value of 0.6000002 to a value of 0.6000 and store it back in the variable?
Similar to other answers, BUT you must not forget that round, floor and trunc are different by definition. See the definition and output example of the following:
http://www.cplusplus.com/reference/cmath/trunc/
In this case we need to trucate with a precision of 4 decimals and get rid of non-significant decimals:
trunc(valueToTrunc*10000)/10000
or
value = (double)((int)(valueToTrunc*10000))/(double)10000
A good reference for why this happens can be found in What Every Computer Scientist Should Know About Floating Point Arithmetic by David Goldberg.
Here is a function using the advice in other answers and an example of its use:
#include <iostream>
#include <cmath>
static void Truncate(double& d, unsigned int numberOfDecimalsToKeep);
int main(int, char*[])
{
double a = 1.23456789;
unsigned int numDigits = 3;
std::cout << a << std::endl;
Truncate(a,3);
std::cout << a << std::endl;
return 0;
}
void Truncate(double& d, unsigned int numberOfDecimalsToKeep)
{
d = roundf(d * powf(10, numberOfDecimalsToKeep)) / powf(10, numberOfDecimalsToKeep);
}
you can use this:
int n = 1.12378;
cout << fixed << setprecision(4) << n;
the output will be: 1.1238
not: 1.1237
it just sea the last decimal number not all: 12.123447 ==> 12.1234
be careful about that...