c ++浮动小数位,这个数字可能会突然出现' 05'在末尾

时间:2014-07-30 09:16:57

标签: c++

int _tmain(int argc, _TCHAR* argv[])
{
    //timer1();
    cout.precision(30);

    char coordinates[100]="-88.5652389526367,39.1187744140625,0";
    char* chars_array_coordinates=strtok(coordinates,",");
    cout<<"chars_array_coordinates"<<chars_array_coordinates<<"\n";
    char* chars_array_coordinates_1=strtok(NULL,",");
    cout<<"chars_array_coordinates"<<chars_array_coordinates_1<<"\n";

    float coordinates_Latitude=atof(chars_array_coordinates);
    cout<<"coordinates_Latitude"<<coordinates_Latitude<<"\n";
    float coordinates_Latitude_1=atof(chars_array_coordinates_1);
    cout<<"coordinates_Latitude_1"<<coordinates_Latitude_1<<"\n";
}

输出

chars_array_coordinates=-88.5652389526367
chars_array_coordinates=39.1187744140625
coordinates_Latitude=-88.565238952636705
coordinates_Latitude=-39.1187744140625

要浮动的字符串:-88.5652389526367到-88.565238952636705&lt; - 该数字最后可能突然变为'05'。会发生什么?

1 个答案:

答案 0 :(得分:2)

如上所述,浮点数是近似值。使用它们时可能会失去精度。您必须阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic

实际上,当编译或解释代码时,您的“0.1”已经四舍五入到该格式中最接近的数字,即使在计算发生之前也会导致小rounding error

为避免此问题,您可以更好地使用小数或双倍。