如何在最初包含 C 中的小数的两部分中转换字符串或中断字符串。我必须逐位解析这个数字。
char s[] = "2.03";
// -->
double a = 2;
double b = 0.03;
这是一个简单的方法吗?
#include <stdlib.h> /* you need this header for conversion functions */
char s[] = "2.03";
double a = (int)atoi(s);
double b = atof(s)-a;
好的。不使用简单函数(仅 pow 和 strlen 函数)。
#include <stdio.h>
#include <math.h>
int main()
{
char s[] = "2.03";
double a = 0,b = 0;
int i,n = 0;
char d = 0;
for(i = 0; i < strlen(s); i++) /* don't want strlen? for(i = 0; s[i] != '\0'; i++) */
{
if(d == 1)
{
b += (s[i]-'0')/(pow(10,++n)); /* don't want pow? make the function w/ a loop */
}
else if(s[i] == '.')
d = 1;
else
{
a *= 10;
a += s[i]-'0'; /* convert chars to numbers */
}
}
printf("%f %f",a,b);
return 0;
}
使用strtod
和modf
:
#include <stdlib.h>
#include <math.h>
double d = strtod(s, NULL);
double a;
double b = modf(d, &a);
那么像下面的函数呢。
void makeTwoPieces (char *str, double *dMost, double *dLeast)
{
double dMultiplier;
*dMost = *dLeast = 0.0;
for (; *str; str++) {
if (*str == '.') {
break;
} else if (*str >= '0' && *str <= '9') {
*dMost *= 10;
*dMost += (*str - '0');
}
}
dMultiplier = 1.0;
for (; *str; str++) {
if (*str >= '0' && *str <= '9') {
dMultiplier /= 10;
*dLeast += (*str - '0') * dMultiplier;
}
}
}
然后您可以在测试工具中使用此功能,如下所示:
int main(int argc, char * argv[])
{
double d1, d2;
char *str = "2.03";
makeTwoPieces (str, &d1, &d2);
return 0;
}