1

我正在尝试从小数中删除尾随零,如果没有更多尾随零,则删除小数。

该字符串由 boost 的gmp_float固定字符串输出产生。

这是我的尝试,但我得到std::out_of_range

string trim_decimal( string toFormat ){
    while( toFormat.find(".") && toFormat.substr( toFormat.length() - 1, 1) == "0" || toFormat.substr( toFormat.length() - 1, 1) == "." ){
        toFormat.pop_back();
    }
    return toFormat;
}

0如果存在小数,如何删除尾随s,如果小数点后没有 s,如何删除0小数?

4

2 回答 2

2

您需要将其更改为:

while( toFormat.find(".")!=string::npos   // !=string::npos is important!!!
    && toFormat.substr( toFormat.length() - 1, 1) == "0" 
    || toFormat.substr( toFormat.length() - 1, 1) == "." )
{
    toFormat.pop_back();
}

这里的关键是添加!=string::npos. 找不到时,std::basic_string::find()将返回std::basic_string::npos,这不等于false(不是您期望的)。

static const size_type npos = -1;
于 2014-04-15T16:21:28.710 回答
1
    auto lastNotZeroPosition = stringValue.find_last_not_of('0');
    if (lastNotZeroPosition != std::string::npos && lastNotZeroPosition + 1 < stringValue.size())
    {
        //We leave 123 from 123.0000 or 123.3 from 123.300
        if (stringValue.at(lastNotZeroPosition) == '.')
        {
            --lastNotZeroPosition;
        }
        stringValue.erase(lastNotZeroPosition + 1, std::string::npos);
    }

在 C++ 中,你有std::string::find_last_not_of

于 2018-01-31T21:14:21.570 回答