使用lexical_cast <float>时精度会丢失(字符串)

时间:2016-06-23 15:04:22

标签: c++ boost visual-studio-2013 floating-point lexical-cast

当使用boost :: lexical_cast(我在VS2013上使用boost版本1.58)时,我无法获得字符串中指定的确切值,即使它在float中是可表示的:

std::wstring t = L"91.25";
float r;
r = boost::lexical_cast<float>(t);

r是91.249992(0x42B67FFF)而不是91.250000(0x42b68000)

boost的早期版本表现出预期的方式。我缺少精确设置吗?

1 个答案:

答案 0 :(得分:2)

事实证明这与提升无关。这似乎是Visual Studio的一个问题,只有VS2013。

#include <iostream>
#include <sstream>
#include <iomanip>
int main()
{
    float a;
    std::stringstream s;
    s.str("91.25");
    s >> a;
    std::wcout << std::setprecision(20) << a << std::endl;
    // displays "91.249992370605469" when compiled with 
    // VS2013 and "91.25" when compiled with VS2010 or VS2015
    return 0;
}