none
C语言,float转换为int 变成0 怎么回事 RRS feed

  • 问题

  • 我用的是VS2003 ,前几天还好好的,这几天float,double转换为int都会归0,

    原因不明,以为自己什么地方数组越界啊之类造成的,查了两天也没看出来什么问题,网上也搜不到,后来写了个函数

    int Float2Int(float f)
    {
        int i;
        float ferror;
        i=(int)f;
        ferror=f-(float)i;
        if(fabs(ferror)>0.99)  //有“1误差”,校正 
        {
            if(f>0)  
            {
                i++;
            }
            else
            {
                i--;
            }
        }
        return(i);
    }

     i=(int)f;
    单步调试f的值是完全正确的,但到i的时候,就变成0了,隐式转换也是一样的,郁闷中。。。。。。

    各位帮我看看

    2010年12月23日 4:00

答案

  • 你是不是在 Release模式下调试了,或者debug模式下没有关闭优化。

    可以把i用MessageBox或者printf打印出来看看它的真实值

    float转int是不会有这种问题的


    0xBAADF00D
    2010年12月23日 4:06
    版主
  • -1<f<1这个区间的时候转成int就是0。


    麻烦把正确答案设为解答。
    2010年12月23日 9:22
    版主
  • 黎明静悄悄,

    您好!我用你的代码试了下,你的代码没有问题。以下是我测的程序。

    #include "stdafx.h"

    #include <math.h>

    #include <iostream>

     

    using namespace std;

     

    int Float2Int(float f)

    {

        int i;

        float ferror;

        i=(int)f;

        ferror=f-(float)i;

        if(fabs(ferror)>0.99)

        {

            if(f>0)  

            {

                i++;

            }

            else

            {

                i--;

            }

        }

           cout<<i;  // i输出看数据;

        return(i);

    }

    int _tmain(int argc, _TCHAR* argv[])

    {

           float a;  //a是测试数据,我用了.4 3.41.4 都正常

           a=2.4;

           int num;

           num=Float2Int(a); //这里num的值就是i的值。也可以把它打印出来看。

           return 0;

    }

    所以你的float转换为int变成0可能有以下种情况:

    1.        SplendourG所说的如果“-1<f<1 的话 i就等于0”。也就是说可能是测试数据的问题。请用f>1的数据再测一下;

    2.        重新建一个工程,再测一下你的代码;

    3.        如果这些都不行,我建议您可以选择重新装VS2003

    谢谢,

    Lucy

     

     

    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

     
    2010年12月24日 7:49
    版主

全部回复

  • 你是不是在 Release模式下调试了,或者debug模式下没有关闭优化。

    可以把i用MessageBox或者printf打印出来看看它的真实值

    float转int是不会有这种问题的


    0xBAADF00D
    2010年12月23日 4:06
    版主
  • -1<f<1这个区间的时候转成int就是0。


    麻烦把正确答案设为解答。
    2010年12月23日 9:22
    版主
  • 黎明静悄悄,

    您好!我用你的代码试了下,你的代码没有问题。以下是我测的程序。

    #include "stdafx.h"

    #include <math.h>

    #include <iostream>

     

    using namespace std;

     

    int Float2Int(float f)

    {

        int i;

        float ferror;

        i=(int)f;

        ferror=f-(float)i;

        if(fabs(ferror)>0.99)

        {

            if(f>0)  

            {

                i++;

            }

            else

            {

                i--;

            }

        }

           cout<<i;  // i输出看数据;

        return(i);

    }

    int _tmain(int argc, _TCHAR* argv[])

    {

           float a;  //a是测试数据,我用了.4 3.41.4 都正常

           a=2.4;

           int num;

           num=Float2Int(a); //这里num的值就是i的值。也可以把它打印出来看。

           return 0;

    }

    所以你的float转换为int变成0可能有以下种情况:

    1.        SplendourG所说的如果“-1<f<1 的话 i就等于0”。也就是说可能是测试数据的问题。请用f>1的数据再测一下;

    2.        重新建一个工程,再测一下你的代码;

    3.        如果这些都不行,我建议您可以选择重新装VS2003

    谢谢,

    Lucy

     

     

    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

     
    2010年12月24日 7:49
    版主