在我的平台上,这将打印出9223372036854775808。
double x = 1e19;
std::cout << static_cast<unsigned __int64>(x) << '\n';
我尝试了Boost.NumericConversion,但得到了相同的结果。
将x分成两个相等的部分,然后将转换后的两半相加可以得到正确的结果。但我需要一个通用的解决方案来在模板代码中使用。
提前感谢。
编辑:这个问题出现在Visual Studio 2008上,但不是MinGW。将4.0e9强制转换为unsigned long可以正常工作。