我试图获得双部分的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?
答案 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),则重构最佳小数是一个非平凡的算法。