从版本字符串

时间:2018-03-21 19:27:24

标签: c++ opengl

我试图获得当前的opengl版本。

glGetString(GL_VERSION)返回

"4.6.0 NVIDIA 391.01"

    std::string strVersion = (const char*)glGetString(GL_VERSION);
    strVersion = strVersion.substr(0, strVersion.find(" "));
    float number = std::atof(strVersion.c_str());

浮点数= 4.59999990

为什么浮动不是4.6.0?

1 个答案:

答案 0 :(得分:1)

为什么你没有得到第三个号码

std::atof将使用代表十进制数的尽可能多的字符。那是4.6。下一个点不能是数字的一部分,因为没有带有两个点的十进制数。十进制数字只有一个点,分隔整数小数部分

为什么你得到4.59999990而不是4.6

因为浮点数无法存储整数小数部分的任何可能组合。它们存储信息的空间有限,因此它们只是近似值。请参阅is floating point math broken?

如何获取版本

版本不是数字。该版本由三个数字组成,而不是一个:460。它们是整数,而不是十进制数。所以你需要只是将版本作为字符串处理:

if (strVersion == "4.6.0")

或者您必须将其拆分为三个部分并分别获取这些整数值。有关如何执行此操作,请参阅Splitting a C++ std::string using tokens