我正在尝试得到一个双精度数的整数部分和小数部分。这就是我是如何实现的:
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,当试图将小数部分作为整数时,问题就出现了。
to_String使szDec = "0.500000000000000“而不是5
当使用substr()函数时,szDec = "0.500000“
使我的decpart = 500000而不是5。
如何停止to_String函数和substr函数将零添加到字符串并将其转换为浮点数?
发布于 2014-09-28 14:26:13
为了回答您的特定问题,std::to_string被故意定义为尽可能简单,并且没有任何可以用来更改输出格式的旋钮。对于浮点数,它被定义为执行与C的%f等价的操作,后者恰好为0.5的输入生成"0.50000"。
boost::lexical_cast<std::string>(d)会给你"0.5",就像std::ostringstream buf; buf << d; szDec = buf.str();一样,或者等价的C,但是,正如评论中指出的,如果你的数字是不能用二进制表示的东西(例如,如果它是0.1而不是0.5),那么重构最佳小数是一个不平凡的算法。
https://stackoverflow.com/questions/26076155
复制相似问题