4

我正面临一个转换问题,希望得到您的帮助。我正在使用 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,我仍然有同样的问题。有没有办法使用istringstreamwithsetprecission(2)来获得由 显示的正确值aAmount

4

1 回答 1

3

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

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

于 2013-08-06T08:31:33.237 回答