一个类型转换的奇怪问题

需要对double型数据进行四舍五入,于是采用了网上广泛的说法:(注意:我使用的VC6.0)

double dValue;//假定dValue为要进行四舍五入的值,假设其为8953.5

//按说以下做法就可以了
//但是我在实际中确遇到了一个奇怪的问题
//在程序的两个不同的位置,都用到了这种转换,但效果却不同:(dValue 值相同,但是转换出来的iInt 值却相差了一个 1)
//想想其实也有这个可能,由于计算方式以及小数位数的不同,我们在调试时看到的dTemp 虽然是8954,
//但是由于是double类型,所以在实际的内存中它可能是8954.000001,也可能是8953.99999
//那么,如果dTemp在内存中是8954.000001则iInt =8954,而如果dTemp在内存中是8953.99999则iInt =8953

double dTemp = dValue+0.5;
int iInt = (int)(dTemp );

为了解决这个问题,我给出了一种新的解决办法:

//四舍五入
int MyGlobalFunction_DoubleConvertToInt(double dValue)
{
    int iRet = 0;
    double dValue2 = dValue+0.5;
    iRet = (int)dValue2;

    double iRemainder  = (double)iRet-dValue2;

    if (fabs(iRemainder) > 0.99)
    {
        iRet ++;
    }

    return iRet;
}

原文地址:https://www.cnblogs.com/gaotaozhaolei/p/926948.html