下面我的 C 代码中发生了一些奇怪的事情。
我想比较数字,我四舍五入到小数点后 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 的结果完全相同,但奇怪的是,sprintf 语句speed_info->myXPos = 6722.31500000
的值speed_info->myYPos > = 30.0876500000
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;
}
}