我正面临转换问题,我希望得到您的帮助。我正在使用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
,但我仍有同样的问题。是否可以使用istringstream
与setprecission(2)
一起获取aAmount
显示的正确值?
答案 0 :(得分:3)
由于浮点值的性质,22.050000000000001是可以存储的最接近22.05的值。如果您只是尝试将22.05存储在一个double中然后打印它,则会发生同样的情况。
如果要打印22.05,则应在输出流上设置精度。或者,您可以调查有理数字库(例如,Boost.Rational)。与double(或float)不同,这将能够精确地存储值22.05。