从版本字符串中提取 OpenGL 版本

extract opengl version from version string

本文关键字:版本 OpenGL 提取 字符串      更新时间:2023-10-16

我试图获取当前的opengl verson。

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?

为什么你没有得到第三个数字

std::atof将采用尽可能多的字符来表示十进制数。那是4.6.下一个点不能是数字的一部分,因为没有带有两个点的十进制数这样的东西。十进制数只有一个点,用于分隔整数小数部分

为什么你会得到 4.59999990 而不是 4.6

因为浮点数不能存储整数小数部分的任何可能组合。它们存储信息的空间有限,因此它们始终只是近似值。看看浮点数学坏了吗?。

如何获取版本

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

if (strVersion == "4.6.0")

或者您必须将其分成三部分并分别获取这些整数值。请参阅使用令牌拆分 C++ std::string 了解如何执行此操作。