我遇到了一个小的C ++问题。首先,“我的”语言是Java,所以我是C ++的新手。 我有这个功能:
double readableDouble( double input )
{
return (int)(input*100+0.5)/100.0;
}
如你所见,没什么特别的。现在我从另一个函数(在同一个类中)调用该函数:
cout << readableDouble(4434.21121131234323243) <<endl; // result: 4434.22 all okay
cout << readableDouble(tempTrack.getLenght()/1000.0); // result: 30.56 all okay
string lenght = boost::lexical_cast<string>(readableDouble((tempTrack.getLenght()/1000.0))); // result 30.55999999999982. expected: 30.56
getLenght()返回一个double。 (两个电话都是双倍的)
我不太确定这是怎么回事?
答案 0 :(得分:3)
From another post(感谢Mic):
来自boost lexical_cast的文档:
用于更复杂的转换,例如精度或格式化 需要更严格的控制,而不是默认行为 lexical_cast,推荐使用传统的stringstream方法。 如果转换数字为数字,则numeric_cast可能会提供 比lexical_cast更合理的行为。
示例:
#include <sstream> #include <iomanip> int main() { std::ostringstream ss; double x = 5; ss << std::fixed << std::setprecision(2); ss << x; std::string s = ss.str(); return 0; }