将词法转换字符串提升为双精度



我遇到一个转换问题,希望您能帮我解决。我使用的是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,但我仍然有同样的问题。有没有办法将istringstreamsetprecission(2)一起使用,以获得aAmount显示的正确值?

由于浮点值的性质,22.050000000000001是可以存储的最接近22.05的值。如果你只是简单地尝试将22.05存储在一个double中,然后打印它,也会发生同样的情况。

如果要打印22.05,则应设置输出流的精度。或者,你可以研究一个有理数库(例如Boost.RRational)。这将能够精确地存储值22.05,而不是double(或float)。

相关内容

  • 没有找到相关文章

最新更新