to_string函数附加零

时间:2014-09-27 15:22:06

标签: c++ double string-conversion

我试图获得双部分的int部分和小数部分。 这就是我实现这一点的方式:

void func(double d)
{
    int intpart, decpart;
    intpart = d;
    string szDec = to_string(d);
    szDec = szDec.substr(szDec.find(".") + 1);
    decpart = stoi(szDec);
    m_iNom = intpart * decpart + 1;
    m_iDenom = decpart;
}

我传递给func 0.5,尝试将小数部分作为整数时出现问题。

而不是得到5,to_String使得szDec =" 0.500000000000000"

当使用substr()函数时,szDec =" 0.500000"

给我带decpart = 500000而不是5。

如何停止to_String函数和substr函数将零附加到字符串并将其转换为float?

1 个答案:

答案 0 :(得分:1)

要回答您的具体问题,std::to_string,有目的地定义为尽可能简单,并且没有任何旋钮可以更改输出格式。对于浮点数,它被定义为执行相应的C %f,恰好为"0.50000"的输入生成0.5

boost::lexical_cast<std::string>(d)"0.5"std::ostringstream buf; buf << d; szDec = buf.str();或等效的C,但是,如评论中所指出的,如果您的号码不是以二进制表示(例如,如果其为0.1而不是0.5),则重构最佳小数是一个非平凡的算法。