【发布时间】:2013-08-06 08:25:09
【问题描述】:
我遇到了转换问题,希望得到您的帮助。我正在使用 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,但我仍然遇到同样的问题。有什么方法可以使用istringstream 和setprecission(2) 来获得aAmount 显示的正确值?
【问题讨论】:
-
您只需要以较低的精度打印它。它始终存储相同的精度。
-
boost::lexical_cast函数实际上在内部使用std::istringstream来进行值的解析/提取。 -
如果我执行以下操作,我会得到 22 个...
std::stringstream precisionValue; precisionValue.precision(2); precisionValue << boost::lexical_cast<double> (aAmount) << std::endl; double dAmount; precisionValue >> dAmount; // Now I get 22 -
precision设置输出的总位数。 22.05 是 4 位数,所以你需要做precisionValue.precision(4)。
标签: c++ lexical-cast atof