在C++中输入double到long的类型返回一个不正确的值?

May*_*ain 1 c++

对不起,如果我的问题太基础了.但有人可以解释我下面行为的原因吗?

int main () {

        double a =1.16;
        cout<<(a*100);   //returning 116
        cout<<(long)(a*100); //returning 115
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么第一个cout返回116而第二个返回115?

请解释

jua*_*nza 5

将浮点数转换为整数类型会导致小数部分截断.仅保留整体部分.因此,如果您具有115.9999999浮点数,则它将作为整数转换为115.

现在,1.16 * 100不会116.0IEEE754浮点中产生,而是一个非常小116的数字,即一个整数部分等于115和非常接近的小数部分的数字1.所以你离开了115.

  • 你能用双倍代表1.16吗?不存在."a"中存储的数字实际上是1.15999999999999992006394222699(假设是IEEE754双重表示).因此你的结果,因为转换为整数类型截断. (4认同)