C++ 从版本字符串中提取opengl版本

C++ 从版本字符串中提取opengl版本,c++,opengl,C++,Opengl,我正在尝试获取当前的opengl verson glGetStringGL_版本返回 4.6.0 NVIDIA 391.01 浮点数=4.599990 为什么浮点不是4.6.0?为什么没有第三个数字 atof将尽可能多地使用表示十进制数的字符。那是4.6。下一个点不能是数字的一部分,因为没有带两个点的十进制数字。十进制数只有一个点,分隔整数和小数部分 为什么你得到的是4.599990而不是4.6 因为浮点数不能存储整数和小数部分的任何可能组合。它们存储信息的空间有限,所以它们总是近似值。看 如何

我正在尝试获取当前的opengl verson

glGetStringGL_版本返回

4.6.0 NVIDIA 391.01

浮点数=4.599990

为什么浮点不是4.6.0?

为什么没有第三个数字

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

为什么你得到的是4.599990而不是4.6

因为浮点数不能存储整数和小数部分的任何可能组合。它们存储信息的空间有限,所以它们总是近似值。看

如何获取版本

版本不是数字。该版本由三个数字组成,而不是一个:4、6和0。它们是整数,不是十进制数。因此,您需要将版本作为字符串处理:

if (strVersion == "4.6.0")

或者你必须把它分成三部分,分别得到这些整数值。请参阅以了解如何执行此操作。

首先,4.6.0不是有效数字。数字中不能有两个小数点。第二,浮点值是不精确的。从什么时候开始,实数有两个小数点?如果我改为strrvision.substr0,3,那么字符串是4.6,浮点数仍然是4.599990,可能是
if (strVersion == "4.6.0")