作者 主題: strtod一問  (閱讀 4906 次)

0 會員 與 1 訪客 正在閱讀本文。

sys68

  • 懷疑的國中生
  • **
  • 文章數: 33
    • 檢視個人資料
strtod一問
« 於: 2006-06-27 20:43 »
請教以下的code只是將一個字串轉成一的double的值.
如何使得輸入與輸出值相同?

//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <stdlib.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused

int main(void)
{
   char password[80], *passwordptr;
   double value;

   printf("Enter a floating point number:");
   gets(password);
   value = strtod(password, &passwordptr);
   printf("The string is %s the number is %lf\n", password, value);
   return 0;
}

//---------------------------------------------------------------------------

結果:
Enter a floating point number:12345678901234567890
The string is 12345678901234567890 the number is 12345678901234567170.000000<== 不是會轉成12345678901234567890 才對?

Enter a floating point number:12345678901234567890123
The string is 12345678901234567890123 the number is 12345678901234567740000.0000<== 不是會轉成12345678901234567890123才對?
如何使得輸入與輸出值相同?
謝謝
代碼: [選擇]

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
strtod一問
« 回覆 #1 於: 2006-06-27 21:38 »

sys68

  • 懷疑的國中生
  • **
  • 文章數: 33
    • 檢視個人資料
strtod一問
« 回覆 #2 於: 2006-06-27 22:48 »
參考過,謝謝.
用原來的函數運算會出錯
12345678901234567890 +1卻變成
12345678901234567171
可有個較好的範例?

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
strtod一問
« 回覆 #3 於: 2006-06-28 00:42 »
你貼的例子是 BCB 說明裏的範例, 所以...不知你真有這方面的需求,
還是只是...為了好玩而已  :roll:

如果真的有這方面的需求, 建立自己的"超大數值"函數來處理,
或是網路上找找有沒有這類函數庫可用..


或者是..看看其它程式語言是否有支援這種超大數值的類型..

sys68

  • 懷疑的國中生
  • **
  • 文章數: 33
    • 檢視個人資料
strtod一問
« 回覆 #4 於: 2006-06-28 00:50 »
是還沒有這類函數庫可用.還在找...
謝謝