Что-то странное происходит в моем C-коде ниже.sprintf, кажется, округляет?
Я хочу сравнить числа и I круглые до 4 знаков после запятой.
Я отлажена и может видеть данные, передается в.
Значение tmp_ptr->current_longitude
является 6722,31500000, а значение tmp_ptr->current_latitude
является 930,0876500000.
После использования заявления Sprintf:
charTmpPtrXPos = "6722.3150" and charTmpPtrYPos = "930.0876".
Я ожидаю, что точно такие же результаты для speed_info-> myXPos и speed_info-> myYPos, но ни странно, даже если speed_info->myXPos = 6722.31500000
а значение speed_info->myYPos > = 30.0876500000
, тем Sprintf заявления
charSpeedPtrYPos= "930.0877"
Так что в основном оператор sprintf ведет себя по-другому для второго значения и, кажется, округляет его. Отлаживая это, я знаю, что вход в оператор sprintf точно такой же.
Может ли кто-нибудь подумать о причине?
sizeOfSpeedList = op_prg_list_size (global_speed_trajectory);
tmp_ptr= (WsqT_Location_Message*)op_prg_mem_alloc(sizeof(WsqT_Location_Message));
tmp_ptr = mbls_convert_lat_long_to_xy (own_node_objid);
sprintf(charTmpPtrXPos, "%0.4lf", tmp_ptr->current_longitude);
sprintf(charTmpPtrYPos, "%0.4lf", tmp_ptr->current_latitude);
speed_info = (SpeedInformation *) op_prg_mem_alloc (sizeof (SpeedInformation));
for (count=0; count<sizeOfSpeedList; count++)
{
speed_info = (SpeedInformation*) op_prg_list_access (global_speed_trajectory, count);
sprintf(charSpeedPtrXPos, "%0.4lf", speed_info->myXPos);
sprintf(charSpeedPtrYPos, "%0.4lf", speed_info->myYPos);
//if((tmp_ptr->current_longitude == speed_info->myXPos) && (tmp_ptr->current_latitude == speed_info->myYPos))
if ((strcmp(charTmpPtrXPos, charSpeedPtrXPos) == 0) && (strcmp(charTmpPtrYPos, charSpeedPtrYPos) == 0))
{
my_speed = speed_info->speed;
break;
}
}
Каковы типы переменных respecive? 'Float'? 'Double'? 'long double'? – glglgl