将lexical_cast字符串提升为double

时间:2013-08-06 08:25:10

标签: c++ lexical-cast atof

我正面临转换问题,我希望得到您的帮助。我正在使用gcc4编译器而且我非常受限于使用gcc4。

我想将std :: string转换为double。

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显示的正确值?

1 个答案:

答案 0 :(得分:3)

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

如果要打印22.05,则应在输出流上设置精度。或者,您可以调查有理数字库(例如,Boost.Rational)。与double(或float)不同,这将能够精确地存储值22.05。