我试图获得当前的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?
答案 0 :(得分:1)
为什么你没有得到第三个号码
std::atof
将使用代表十进制数的尽可能多的字符。那是4.6
。下一个点不能是数字的一部分,因为没有带有两个点的十进制数。十进制数字只有一个点,分隔整数和小数部分。
为什么你得到4.59999990而不是4.6
因为浮点数无法存储整数和小数部分的任何可能组合。它们存储信息的空间有限,因此它们只是近似值。请参阅is floating point math broken?。
如何获取版本
版本不是数字。该版本由三个数字组成,而不是一个:4
,6
和0
。它们是整数,而不是十进制数。所以你需要只是将版本作为字符串处理:
if (strVersion == "4.6.0")
或者您必须将其拆分为三个部分并分别获取这些整数值。有关如何执行此操作,请参阅Splitting a C++ std::string using tokens。