我遇到一个转换问题,希望您能帮我解决。我使用的是gcc4编译器,并且我被限制使用gcc4。
我想将std::string转换为双精度。
std::string aQuantity = aRate.getQuantity();
std::string aAmount = aRate.getAmount();
// aAmount = "22.05"
double dQuantity = boost::lexical_cast<double>(aQuantity);
double dAmount = boost::lexical_cast<double> (aAmount);
// dAmount = 22.050000000000001
顺便说一句,我也尝试了atof
,但我仍然有同样的问题。有没有办法将istringstream
与setprecission(2)
一起使用,以获得aAmount
显示的正确值?
由于浮点值的性质,22.050000000000001是可以存储的最接近22.05的值。如果你只是简单地尝试将22.05存储在一个double中,然后打印它,也会发生同样的情况。
如果要打印22.05,则应设置输出流的精度。或者,你可以研究一个有理数库(例如Boost.RRational)。这将能够精确地存储值22.05,而不是double(或float)。