C 将字符串转换为double或float以执行数学公式

C 将字符串转换为double或float以执行数学公式,c,string,floating-point,type-conversion,double,C,String,Floating Point,Type Conversion,Double,我有一个函数,我正试图从PHP转换。我正在执行类似以下示例的函数: latlong_hex("1234.5678N"); 我需要处理结果,但是我遇到了字符串到双精度转换和计算的问题。转换后,我将丢失小数点后的所有数字。底部的十六进制函数工作正常 int latlong_hex(char* gps_coord) { int gps_result; char direction[2] = {0}; char gps_latlong[10] = {0}; double

我有一个函数,我正试图从PHP转换。我正在执行类似以下示例的函数:

latlong_hex("1234.5678N");
我需要处理结果,但是我遇到了字符串到双精度转换和计算的问题。转换后,我将丢失小数点后的所有数字。底部的十六进制函数工作正常

int latlong_hex(char* gps_coord)
{
    int gps_result;
    char direction[2] = {0};
    char gps_latlong[10] = {0};
    double latdeg;
    double tempDec;
    char* tempGPS;

    strncpy(gps_latlong, gps_coord, 9);
    strncpy(direction, gps_coord+9, 1);

    tempDec = strtod(gps_latlong, NULL);
    free(gps_latlong);

    tempDec = tempDec / 100;

    if(direction == 'W' || direction == 'S')latdeg = round((floor(tempDec)+((tempDec - floor(tempDec))/60),7))*-1;
    else latdeg = round((floor(tempDec) + ((tempDec - floor(tempDec))/60),7));
    if(latdeg > 0){
        gps_result = latdeg / 0.0000001;
    }
    else{
        gps_result = (4294967295 + (latdeg/0.0000001))  ;
    }

    dec_hex(gps_result);

    return 1;
}
这:

是即时未定义的行为,因为
gps\u latlong
不是堆分配的对象。拆下那条线

另外,您应该直接在
gps\u-coord
上调用
strod()
,本地复制没有任何作用。

这:

是即时未定义的行为,因为
gps\u latlong
不是堆分配的对象。拆下那条线


另外,您应该直接在
gps\u-coord
上调用
strotd()
,本地复制没有任何作用。

gps\u-latlong正在从字符串中提取包含不需要的字母的数字。@Eddie但是
strotd()
不会在意,如果您给它“1.2FOO”它将找到
1.2
,并在
F
处停止。当您仍要将字符串交给
strod()
时,在字符串周围进行杂耍是没有意义的。事实上,请查找第二个参数(您设置为
NULL
)的用法。gps\u latlong正在从包含不需要的字母的字符串中提取数字。@Eddie但是
strod()
不会在意,如果您给它“1.2FOO”,它将找到
1.2
,并停在
F
。当您仍要将字符串交给
strod()
时,在字符串周围进行杂耍是没有意义的。事实上,请查找第二个参数(您已设置为
NULL
)的用法。什么是
gps\u结果
?它没有在代码中的任何地方声明。我的水晶球告诉我它被声明为
intgps\u结果
。即使您认为它工作正常,也请向我们展示
dec\u hex
strncpy(gps\u latlong,gps\u coord,9);strncpy(方向,gps坐标+9,1)----->
char direction=gps_coord[9];strncpy(gps_latlong,gps_coord,8)什么是
gps\U结果
?它没有在代码中的任何地方声明。我的水晶球告诉我它被声明为
intgps\u结果
。即使您认为它工作正常,也请向我们展示
dec\u hex
strncpy(gps\u latlong,gps\u coord,9);strncpy(方向,gps坐标+9,1)----->
char direction=gps_coord[9];strncpy(gps_latlong,gps_coord,8)
free(gps_latlong);