2011-08-17 65 views
0

我不知道如何將字符串值轉換爲double或float。以下是我想要轉換的示例字符串:"3.45667"。我正在努力處理點。將字符串轉換爲浮點數而不使用內置函數c

我試過,但它不工作:

#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

下面的程序只是計算有多少位是小數點後並縮放結果結束,而不是每個數字。

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) 
+0

這是行不通的。由於指針「* s」永遠不會遞增,因此存在無限循環。此外,如果您修復該問題,則不處理小數點右邊的數字。 – 2011-08-17 17:57:55

+0

@Colt,S在同時塊的最後一行的每一個循環遞增。錯誤處理應該是一個塊,當然,縮進明確指出s ++不是它的一部分。但是,如果您願意,我會添加一個分號以使其適合複製和粘貼,這顯然是唯一重要的事情。鑑於此,你的其他陳述純屬虛假。 – Ingo

+0

@Ingo感謝您提供正確的解決方案 – Srini

2

這是一種算法..

  1. 找到.
  2. 獲取子到這一點,並轉換爲整數(通過人物迭代,轉換爲int - 應該是一個簡單的問題)
  3. 做完所有事情之後,還要跟蹤「分數」組件中的位數。
  4. 將「分數」分量除以10的冪數,然後將其添加到積分分量。

編輯:如果不使用C功能,並給出了C++的標籤,我會去用..

std::istringstream foo("3.141"); 
double v; 
foo >> v; 

沒有C功能在眼前! ;)

+0

這就是C++。 OP是C. –

+0

@ carrot-top,顯然!原來的問題被標記爲C++! – Nim

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 
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; 

或這樣的事情。在它最有可能的一些錯誤..

+0

will * string!='\ 0'是否與字符數組一起工作? – xitx

+0

hm?我不知道你的意思..我只是寫了一些最少的代碼,因爲我懶得話如果你需要一些錯誤檢查寫一個算法..,你可以做你自己:) – duedl0r

+0

哦,來吧,你寫一些代碼_with這無聊checks_向低技能的程序員 - 當然這是存在的stackoverflow。你必須解釋一些沒有解決一些簡單的練習練習 – xitx

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; 
} 

您將有一張雙人牀和那麼你將需要轉換或轉換爲浮動。

相關問題