線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1130
推到 Plurk!
推到 Facebook!

看源碼與偵測實數中字元(不含負號,小數點)

尚未結案
marky1
一般會員


發表:17
回覆:29
積分:9
註冊:2003-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-23 20:29:23 IP:140.118.xxx.xxx 未訂閱
請問一下是否有可能看到FloatToStr()的內部程式碼 因為小弟想要偵測實數中有多少個字元 但是並不包含負號與小數點, 要不然直接用FloatToStr().Length()就好啦 所以我想要參考一下FloatToStr()是怎麼寫出來的 假如有先進有些點子或是知道如何看到函式的內部程式碼的話 麻煩點一下小弟 謝謝!
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-24 09:28:50 IP:61.231.xxx.xxx 未訂閱
引言: 請問一下是否有可能看到FloatToStr()的內部程式碼 因為小弟想要偵測實數中有多少個字元 但是並不包含負號與小數點, 要不然直接用FloatToStr().Length()就好啦 所以我想要參考一下FloatToStr()是怎麼寫出來的 假如有先進有些點子或是知道如何看到函式的內部程式碼的話 麻煩點一下小弟 謝謝!
可以先用 int iValue=dValue; 轉成整數,再 IntToStr(iValue).Length() 得到長度,當然還要判斷一下正負
if(iValue<0)
  return IntToStr(iValue).Length()-1;
else
  return IntToStr(iValue).Length();
沒空更新的網頁... http://big5.to/吃軟也吃硬 C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/03/24 09:34:17
------
http://www.ViewMove.com
BABM
一般會員


發表:3
回覆:8
積分:7
註冊:2002-09-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-24 12:17:01 IP:203.204.xxx.xxx 未訂閱
它的內部程式碼應該是在sysutils.pas裡,如下: function FloatToStr(Value: Extended): string; var Buffer: array[0..63] of Char; begin SetString(Result, Buffer, FloatToText(Buffer, Value, fvExtended, ffGeneral, 15, 0)); end; 我是用搜尋的方式在CBuilder6目錄裡找的, 不知道這是不是你要的。 ps:它主要是用FloatToText這一個函式(在同一個檔案), 不過這一個函式可是用了一堆asm碼,要花點時間才能搞清楚…… 人苦於不知足, 既得隴復望蜀。
------
人苦於不知足,
既得隴復望蜀。
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-24 13:09:20 IP:203.75.xxx.xxx 未訂閱
引言: 請問一下是否有可能看到FloatToStr()的內部程式碼 因為小弟想要偵測實數中有多少個字元 但是並不包含負號與小數點, 要不然直接用FloatToStr().Length()就好啦 所以我想要參考一下FloatToStr()是怎麼寫出來的 假如有先進有些點子或是知道如何看到函式的內部程式碼的話 麻煩點一下小弟 謝謝!
我的建議是除非你想練功, 不然要達成你的需求去看 source code 實在太誇張了, 你覺得這樣好不好? int i, j = 0; AnsiString asTemp = FloatToStr(fSource); for (i = 0;i
------
Jesse Chan
marky1
一般會員


發表:17
回覆:29
積分:9
註冊:2003-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-24 21:52:02 IP:140.118.xxx.xxx 未訂閱
首先感謝三位先進(dllee、BABM、jessechan)..^^ 三位先進絲毫不吝嗇的熱心協助令小弟感動不已.. 小弟學習到: 1.不能死腦筋地只想某一種方法,解決問題的方法不只有一種,別的方法更快更 省力。 2.應用已知的知識來求解出問題會較有效率,而且充足利用到既知的知識。    另外dllee法似乎不能處理小數點後面,但還是感謝。也感謝BABM先進,您讓小弟學習到若要看到內部程式碼可使用「搜尋方式」;其實小弟也有想過,不過我一直幻想著bcb可以像vc++那樣用「trace方式」就可看到內部程式碼,不好意思我想太多了...    小弟自己也有想出一拙法,如下:  
  int iCnt = 0;
  double dSource = -789491.461569;
  AnsiString asTemp = FormatFloat("0.000", dSource);
  char *ch = asTemp.c_str();
  while(*ch != '\0')
  {
    if(*ch >= '0' && *ch <= '9')
      iCnt  ;
    *ch  ;
  }
  Edit1->Text = asTemp;
  Edit2->Text = IntToStr( iCnt );
系統時間:2024-03-29 20:25:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!