我正面临一个转换问题,我需要你的帮助。我使用的是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显示的正确值?
发布于 2013-08-06 08:31:33
由于浮点值的性质,22.050000000000001是与可以存储的22.05最接近的值。如果你只想把22.05储存在一个双人间,然后打印出来的话,也会发生同样的情况。
如果要打印22.05,则应在输出流上设置精度。或者,您可以研究一个有理数库(例如,Boost.Rational)。这将能够精确地存储22.05值,不像双(或浮动)。
https://stackoverflow.com/questions/18075131
复制相似问题