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

发布于 2024-11-25 09:36:32 字数 78 浏览 0 评论 0原文

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

我想避免浮动。我该怎么做?

"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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

披肩女神 2024-12-02 09:36:32

最小基本代码:

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

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

旧城烟雨 2024-12-02 09:36:32

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

Remove dot char from string and convert it directly to int

乜一 2024-12-02 09:36:32

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

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
蓝海似她心 2024-12-02 09:36:32

从字符中删除点,然后
最简单但不是最好的使用atoi

参见我的回答此处,了解其他可能的方法。

Remove the dot from the char and then
Simplest but not the best use atoi

See my answer here, for other possible ways.

能怎样 2024-12-02 09:36:32

正如 Als 所说,使用 atoi,但稍作改动,去掉句点字符串并使用 atoi 将结果转换为 int。

As Als sais, use atoi, but with a twist, strip the string of the period and convert the result into int using atoi.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文