类型转换带来的问题

请看下面这段代码

#include <iostream> #include <boost/shared_ptr.hpp> #include <boost/asio/streambuf.hpp> #include <boost/cstdint.hpp> int main() { boost::uint32_t intelligence = 57; boost::uint32_t base_damage = 24; boost::uint32_t random_damage = 4; boost::uint32_t armor = 91; boost::uint32_t strength = 144; float skillparam = 1.12; float result = 0.0f; result = (0.0f + intelligence + base_damage + random_damage - armor - strength * 0.15f) * skillparam; std::cout << result << std::endl; result = (intelligence + base_damage + random_damage - armor - strength * 0.15f) * skillparam; std::cout << result << std::endl; return 0; }

输出是:

-30.912
4.81036e+009

 

为啥呢?因为类型转换的问题,前面都是uint32_t类型来计算,因此一旦小于0,就会出现一个很大的数,最终导致的结果也不是预期的,而一开始就用0.0f的话,事实上是将所有的数字都变成了float,它可以表示很大的数,因此不会出错。

你可能感兴趣的:(类型转换带来的问题)