"35.28" is stored as a char*
. I need to turn it into an integer (35280).
I want to avoid floats. How can I do this?
Minimal basic code:
std::string s = "35.28";
s.erase(std::remove(s.begin(), s.end(), '.'), s.end()); //removing the dot
std::stringstream ss(s);
int value;
ss >> value;
value *= 10;
std::cout << value;
Output:
35280
Online demo : http://ideone.com/apRNP
That is the basic idea. You can work on the above code to make it more flexible so that it can be used for other numbers as well.
EDIT:
Here is one flexible solution:
int Convert(std::string s, int multiplier)
{
size_t pos = s.find('.');
if ( pos != std::string::npos)
{
pos = s.size() - (pos+1);
s.erase(std::remove(s.begin(), s.end(), '.'), s.end());
while(pos) { multiplier /= 10; pos--; }
}
else
multiplier = 1;
std::stringstream ss(s);
int value;
ss >> value;
return value * multiplier;
}
Test code:
int main() {
std::cout << Convert("35.28", 1000) << std::endl; //35.28 -> 35280
std::cout << Convert("3.28", 1000) << std::endl; //3.28 -> 3280
std::cout << Convert("352.8", 1000) << std::endl; //352.8 -> 352800
std::cout << Convert("35.20", 1000) << std::endl; //35.20 -> 35200
std::cout << Convert("3528", 1000) << std::endl; //no change
return 0;
}
Output:
35280
3280
352800
35200
3528
Online Demo : http://ideone.com/uCujP
Do you mean stored as a string (char*
)? Then you can create your own parser:
int flstrtoint(const char *str) {
int r = 0;
int i = strlen(str) - 1;
while (i >= 0) {
if (isdigit(str[i])) {
r *= 10
r += str[i] - `0`;
}
i--;
}
return r;
}
flstrtoint("35.28"); // should return 3528
As Als sais, use atoi, but with a twist, strip the string of the period and convert the result into int using atoi.