来自http://www.cprogramming.com/tips/tip/difference-between-float-and-double:
在 c++ 中,任何像 4.12 这样的值都默认被视为双精度值。比较浮点数和双精度数可能是一项棘手的工作,因为精度差异会导致微小的错误。例如:
float a = 4.12;
if(a == 4.12)
{
cout << "hello";
}
else
{
cout << "bye";
}
这会将输出显示为“bye 4.12”
为什么?
因为默认情况下 4.12 是一个双精度数(例如在 if 语句中或在我们的变量的赋值中),但是将它存储在一个浮点数中它会失去一些精度,因此将双精度数与浮点数进行比较会导致在数字的精度——请记住,浮点数和双精度数并不精确。
这里有两个教训:一个是大多数时候不应该直接比较浮点数,另一个是硬编码浮点数的默认大小和类型是 double。
问题是'你不应该比较浮点变量和双常量'。
所以我的问题是比较浮点变量和浮点常量后跟“f”可以吗?
像这样的东西。
if(a == 4.12f)