乍一看似乎很简单,但我找不到任何关于这个案例的好的描述。
我有一个返回 64 位值的方法。该值是使用值在内部计算的long double
。在方法结束时,我想检查是否long double
在值的范围内long long
,否则只分配最大值long long
。
我使用以下代码,它只检查正范围,因为没有负结果:
long long calculateSomething()
{
long double calculatedValue = ...;
long long result;
if (calculatedValue > static_cast<long double>(std::numeric_limits<long long>::max())) {
result = std::numeric_limits<long long>::max();
} else {
result = static_cast<long long>(std::floor(calculatedValue));
}
return result;
}
现在我想知道,long double
可以等于一个double
. 是否会转换static_cast<long double>(std::numeric_limits<long long>::max())
始终正常工作吗?
还是有另一种更好的方法来检查范围?