Преобразовать десятичную сумму в долларах из строки в масштабированное целое число - PullRequest
1 голос
/ 21 июля 2011

"35,28" сохраняется как char*. Мне нужно превратить его в целое число (35280).

Я хочу избежать поплавков. Как я могу это сделать?

Ответы [ 5 ]

4 голосов
/ 21 июля 2011

Минимальный базовый код:

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;

Выход:

35280

Онлайн демо: http://ideone.com/apRNP

Это основная идея. Вы можете работать над приведенным выше кодом, чтобы сделать его более гибким, чтобы его можно было использовать и для других номеров.


EDIT:

Вот одно гибкое решение:

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;
}

Тестовый код:

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;
}

Выход:

35280
3280
352800
35200
3528

Онлайн-демонстрация: http://ideone.com/uCujP

2 голосов
/ 21 июля 2011

Удалить точечный символ из строки и преобразовать его непосредственно в int

1 голос
/ 21 июля 2011

Вы имеете в виду, хранится как строка (char*)?Затем вы можете создать свой собственный парсер:

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
0 голосов
/ 21 июля 2011

Как и Als sais, используйте atoi, но с изюминкой удалите строку периода и преобразуйте результат в int, используя atoi.

0 голосов
/ 21 июля 2011

Удалить точку с символа и затем
Простейшее, но не лучшее использование atoi

Смотрите мой ответ здесь , для других возможных способов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...