c++ 从 'float' 到 'int32' 的转换,可能丢失数据

标签 c++

构建此代码返回从“float”到“int32”的转换,可能会丢失数据

我该如何解决它,我乞求学习 cpp

uint16 nRandom = Radius;
        if (nRandom <= 0)
            fRandom_X = (float)fX;
        else
            fRandom_X = (float)(myrand((fX - nRandom) * 10, (fX + nRandom) * 10) / 10);

        nRandom = Radius;
        if (nRandom <= 0)
            fRandom_Z = (float)fZ;
        else
            fRandom_Z = (float)(myrand((fZ - nRandom) * 10, (fZ + nRandom) * 10) / 10);

        pNpc->SetPosition(fRandom_X, 0.0f, fRandom_Z);

最佳答案

(将此答案限制为 IEEE754。)

float 无法存储 int32 可以存储的所有可能值(反之亦然),因此您的编译器会向您发出有用的警告。

一个经验法则是不要像这样混合你的类型:使用一种类型并坚持使用它。

如果您需要深入研究 float ,那么为了轻松的生活(以及现在可能更快的代码),请使用 double 而不是 floatdouble 可以存储 int32 可以存储的所有值,因此警告将消失。

关于c++ 从 'float' 到 'int32' 的转换,可能丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54163172/

相关文章:

c++ - 从具有可变数量的模板参数的模板化类中的特定基础获取结果

localtime_r 的 C++11 替代方案

c++ - 带模板的 N 维嵌套元循环

c++ - "Connecting"SDL_Surface 到 shared_ptr

c++ - 将 Windows C++ 项目从 Qt4 移动到 5 会出现数百个看似不相关的编译错误

c++ - 如何使 Insure++ 与 boost 和 g++ 3.4.x 一起工作

C++(嵌套)函数调用指令——寄存器

c++ - 如何让QScrollArea根据QDialog改变大小?

c++ - C/C++ - 从封闭类继承的嵌套类

c++ - findHomography 在 OpenCV 3.0 中不起作用