我不知道如何将字符串值转换为double或float。以下是我要转换的示例字符串:"3.45667"
。我正在努力处理这个点。
我尝试了这个但是没有用:
#include<stdio.h>
int main()
{
char string_array[] = { "3.45667" };
float float_array[20], index = 0;
for(index = 0 ; index < 7 ; index++)
{
if(string_array[index] == '.')
{
printf("dot");
// here, how to add dot to the float_array?
} else
{
float_array = (float)(string_array[index] - '0');
}
}
return 0;
}
如何在上面的代码中添加小数点?我认为这可以用指数形式完成,但我不知道如何使用指数形式。
答案 0 :(得分:2)
这是一个算法..
.
编辑:如果没有使用C
函数,并且给出了c ++标记,我会选择..
std::istringstream foo("3.141");
double v;
foo >> v;
看不见C
功能! ;)
答案 1 :(得分:0)
当你去求它们时,使用字符串中小数点的位置来按比例因子10缩放数字...所以小数点左边的第n项缩放10 ^(n- 1)并且右边的第m个项目按(0.1)^ m缩放。所以......
for each char in thestr do
if it's a digit then
Add the digit to the list
else then
dp = position - 1
sum = 0
for each digit in list
sum = sum + digit * pow(10, dp - position)
return sum
答案 2 :(得分:0)
int num = 0;
// parse the numbers before the dot
while(*string != '.')
num += 10*num + *string++ - '0';
string++;
float frac = 0.0f;
float div = 1.0f;
// parse the numbers after the dot
while(*string != '\0') {
frac += (*string++ - '0')/div;
div /= 10.0f;
}
float res = num + frac;
或类似的东西......很可能是它中的一些错误..
答案 3 :(得分:0)
以下程序只计算小数点后面的位数,并在最后对结果进行缩放,而不是每个数字。
float result = 0.0;
float scale = 0.0;
char *s = "3.14567":
while (*s) {
if (*s >= '0' && *s <= '9') {
result = 10.0 * result + (float)(*s - '0');
scale *= 10.0;
}
else if (*s == '.') scale = 1.0;
else { /* ERROR HANDLING */ }
s++;
}
result = result / (scale == 0.0 ? 1.0 : scale)
答案 4 :(得分:0)
这有点紧迫:
#include <ctype.h>
double _atof(char *s)
{
double a = 0.0;
int e = 0;
int c;
while ((c = *s++) != '\0' && isdigit(c)) {
a = a*10.0 + (c - '0');
}
if (c == '.') {
while ((c = *s++) != '\0' && isdigit(c)) {
a = a*10.0 + (c - '0');
e = e-1;
}
}
if (c == 'e' || c == 'E') {
int sign = 1;
int i = 0;
c = *s++;
if (c == '+')
c = *s++;
else if (c == '-') {
c = *s++;
sign = -1;
}
while (isdigit(c)) {
i = i*10 + (c - '0');
c = *s++;
}
e += i*sign;
}
while (e > 0) {
a *= 10.0;
e--;
}
while (e < 0) {
a *= 0.1;
e++;
}
return a;
}
你将有一个双倍,然后你需要转换或转换为浮动。