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'。会发生什么?
答案 0 :(得分:2)
如上所述,浮点数是近似值。使用它们时可能会失去精度。您必须阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic
实际上,当编译或解释代码时,您的“0.1”已经四舍五入到该格式中最接近的数字,即使在计算发生之前也会导致小rounding error。
为避免此问题,您可以更好地使用小数或双倍。