将十进制美元金额从字符串转换为缩放整数

时间:2011-07-21 18:55:09

标签: c++ string decimal

“35.28”存储为char*。我需要把它变成一个整数(35280)。

我想避免花车。我怎么能这样做?

5 个答案:

答案 0 :(得分:4)

最小基本代码:

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

这是基本的想法。您可以使用上面的代码使其更加灵活,以便它也可以用于其他数字。


编辑:

这是一个灵活的解决方案:

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

答案 1 :(得分:2)

从字符串中删除dot char并将其直接转换为int

答案 2 :(得分:1)

您的意思是存储为字符串(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

答案 3 :(得分:0)

从char中删除点然后再次 最简单但不是最佳使用 atoi

有关其他可能的方法,请参阅我的回答 here

答案 4 :(得分:0)

作为Als sais,使用atoi,但有一个扭曲,剥去句点的字符串并使用atoi将结果转换为int。