+ -
当前位置:首页 → 问答吧 → 关于double转int丢失精度问题,急

关于double转int丢失精度问题,急

时间:2010-07-14

来源:互联网

int main()
{
    double d_value=1.13;
    d_value = d_value*100;
    cout<<"d_value"<<d_value<<endl;
    cout<<"d_value int" <<(int) d_value<<endl;
}

输出结果为:
这个为何这样处理
d_value before1.13
d_value113
d_value int112
为何丢失了精度,是和硬件有关系么

作者: sunday1207   发布时间: 2010-07-14

d_value = d_value*1000/10;

作者: egmkang   发布时间: 2010-07-14

浮点数不精确,1.13实际可能是1.129999之类的,所以2楼的也不行的。
可以加个0.0001之类的再取整

作者: hellioncu   发布时间: 2010-07-14

double到int转换,有“截断”误差的。
可以通过+0.5来完成操作。

int main()
{
    double d_value=1.13;
    d_value = d_value*100+0.5;
    cout<<"d_value"<<d_value<<endl;
    cout<<"d_value int" <<(int) d_value<<endl;
}

作者: shaoxia   发布时间: 2010-07-14

本帖最后由 donglongchao 于 2010-07-14 13:32 编辑

浮点数运算出来的和直接定义的不同。
浮点数运算精度丢失问题。恩。

作者: donglongchao   发布时间: 2010-07-14

用stringstream来转换应该就没有问题了。

                stringstream ss;
                ss << d_value;
                int i = 0;
                ss >> i;
            cout<<"d_value int" <<i<<endl;

作者: srdgame   发布时间: 2010-07-14