编辑-
嘿,我的strtof功能有问题,我在Internet上找不到解决方案,有人可以帮忙吗?
这是一个简单的功能:
float getCord(int placeOnArray, char str[80]){
char str2[7];
for (int i=placeOnArray ;i<placeOnArray+7;i++){
str2[i-placeOnArray]=str[i];
}
float f1;
f1=strtof(str2,NULL);
return f1;
}
输入-str = ATOM 1 N ASN A 1 -4.890 -12.296 -15.280 1.00 30.36 N ,放在array = 31上
所需结果:-4.890 ,返回结果:-4.88999987
答案 0 :(得分:1)
strtof
可以正常工作:
包括这个小程序:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
float f = strtof("4.890", NULL);
printf("%10.10f\n", f);
}
输出为:
4.8899998665
在浮点数中没有4.890
的确切表示。您需要阅读这篇SO文章:
您的getCord
函数也是错误的:
这是一种更简单正确的替代方法:
float getCord(int placeOnArray, char str[]) {
return strtof(str + placeOnArray, NULL);
}
无需提取代表数字的字符串,您可以直接扫描原始字符串中的数字。 strtof
将停在与0
-9
和'.'
不同的第一个字符处。将上面程序中的第一行更改为float f = strtof("4.890 ", NULL);
,输出将相同。
答案 1 :(得分:0)
所需结果:-4.890,返回结果:-4.88999987
在浮点运算中总会有一些错误。这是预料之中的,程序员应注意。
这就是为什么不能将iphp->addr[1]
用于浮点数的原因。您需要检查数字是否在给定的错误范围内。对于浮点数,这是f1==f2
答案 2 :(得分:0)
//
// main.c
//
//
// Created by myhaspl on 2018/10/22.
// myhaspl@myhaspl.com.
// https://dmyhaspl.github.io/
//
#include <stdlib.h>
#include <stdio.h>
char mytoken[10];
char* getCord(int placeOnArray, char mystr[80]){
const char s[2] = " ";
char str2[7];
char* token=mytoken;
for (int i=placeOnArray ;i<placeOnArray+7;i++){
str2[i-placeOnArray]=mystr[i];
}
strcpy(mytoken,strtok(str2, s));
printf("%s\n",mytoken);
return mytoken;
}
int main(){
char str[80] = "ATOM 1 N ASN A 1 -4.890 -12.296 -15.280 1.00 30.36 N";
char* token=getCord(17,str);
printf("%s\n",token);
float number=atof(token);
printf( "%f\n", number );
return 0;
}
-4.890
-4.890
-4.890000