奇狐社區論壇
在這個頁面顯示本主題全部的 10 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 字串符轉換 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=5212)


由 peter109 在 2006-05-14 21:51 發表:

字串符轉換

想要求 收盤價的每一個值
例如 收盤價是51.26
c1:...=6
c2:...=2
c3:...=1
c4:...=5

試寫公式如下
cs:FRACPART(C)*100,precision0,linethick;//小數化整 也試過不用取小數值 而直接求值
c1:strtonum(strright(numtostr(Cs,0),1)),linethick;//小數右邊第一位數值
c2:strtonum(strleft(numtostr(Cs,0),1)),linethick;////小數左邊第一位數值
vertline(c1<ref(C1,1));//測試用
vertline(c1>ref(C1,1));//測試用
vertline(c2<ref(C2,1));//測試用
vertline(c2>ref(C2,1));//測試用
cz:INTPART(C),precision0,linethick;//取整數部分
c3:strtonum(strright(numtostr(Cz,0),1)),linethick;//整數右邊第一位值
vertline(c3<ref(C3,1));//測試用
vertline(c3>ref(C3,1));//測試用
partline(C,0),linedot;

搞不懂 為何出來的數值全部都是固定的值(全部都是最後一根K線的值) 不會因為K線位置的變動而改變
然而由圖中(TW2353)可以清楚的看到 值應該是有變化的
煩請指導

__________________
至誠能勝天下至偽
至拙能勝天下至巧


由 cgjj 在 2006-05-14 23:56 發表:

numtostr 是不支援數列的喔

可用下列方式處理:
CC:=c;
C1:INTPART(mod(CC,1000)/100);
C2:INTPART(mod(CC,100)/10);
C3:INTPART(mod(CC,10));
C4:INTPART(mod(CC*10,10));
C5:INTPART(mod(CC*100,10));


由 peter109 在 2006-05-15 00:50 發表:

多謝版大的指導 我試試

__________________
至誠能勝天下至偽
至拙能勝天下至巧


由 peter109 在 2006-05-15 01:43 發表:

還是有問題耶

出來的值有些時候正確 有些時後不正確
請觀看個股 然後比對每一個收盤價 例如最近的20根K線 似乎取整的時候系統會自動四捨五入 導致不正常 例如TW1110東泥 日期5/11和 5/9值就是錯誤的

公式如下
CC:=c;
C1:INTPART(mod(CC,100000)/10000),linethick;//整數萬
c2:INTPART(mod(CC,10000)/1000),linethick;//整數千
C3:INTPART(mod(CC,1000)/100),linethick;//整數百
C4:INTPART(mod(CC,100)/10),linethick;//整數十
C5:INTPART(mod(CC,10)),linethick;//整數個位
C6:INTPART(mod(CC*10,10)),linethick;
C7:INTPART(mod(CC*100,10)),linethick;
C8:INTPART(mod(CC*1000,10)),linethick;

__________________
至誠能勝天下至偽
至拙能勝天下至巧


由 cgjj 在 2006-05-15 11:24 發表:

mod(c,10) 和 mod(7.94,10) 目前公式系統處理方式不同
前者有四捨五入後者沒有
已告知研發部修正成均不四捨五入
近期會發佈修正

修正前可採用下列方式處理:
CC:=c+0.005;
MM1:INTPART((cc-10000*INTPART(cc/10000))/1000);
MM2:INTPART((cc-1000*INTPART(cc/1000))/100);
MM3:INTPART((cc-100*INTPART(cc/100))/10);
MM4:INTPART(cc-10*INTPART(cc/10));
MM5:INTPART(cc*10-10*INTPART(cc*10/10));
MM6:INTPART(cc*100-10*INTPART(cc*100/10));
INTPART(cc*100);


由 cgjj 在 2006-05-15 11:37 發表:

因為奇狐預設是顯示到小數第二位
故需加入 CC:=c+0.005; 來處理

若您顯示的是到第三位
則需加入 CC:=c+0.0005; 來處理

其它依此類推


由 peter109 在 2006-05-15 14:58 發表:

我是這麼解的

CC:C*10000,linethick;
C1:mod(CC,10),linethick;//以下小數千位
c2A:=mod(CC,100);//小數兩位
C2:INTPART(MOD(c2A-C1,100)/10),linethick;//小數百位
.... 餘類推

__________________
至誠能勝天下至偽
至拙能勝天下至巧


由 peter109 在 2006-05-16 20:30 發表:

不知是否bug

下式係lillian2005 兄提出來的另解方式
CC:C,linethick,precision4;
cs:cc*10000,precision0,linethick0;
ss:strlen(numtostr(Cs[SYSPARAM(1)],0)),linethick0,colorwhite;
s4:strtonum(strmid(numtostr(Cs[SYSPARAM(1)],0),ss-3,1)),linethick;//小數個位
s3:strtonum(strmid(numtostr(Cs[SYSPARAM(1)],0),ss-2,1)),linethick;//小數十位
s2:strtonum(strmid(numtostr(Cs[SYSPARAM(1)],0),ss-1,1)),linethick;//小數百位
s1:strtonum(strright(numtostr(Cs[SYSPARAM(1)],0),1)),linethick;//小數千位
z1:strtonum(strmid(numtostr(Cs[SYSPARAM(1)],0),ss-4,1)),linethick;//整數個位
//以下是我添加的部分
z2:strtonum(strmid(numtostr(Cs[SYSPARAM(1)],0),ss-5,1)),linethick;//整數十位
z3:strtonum(strmid(numtostr(Cs[SYSPARAM(1)],0),ss-6,1)),linethick;//整數百位

請比對TW1110東泥
您會發覺東泥的整數只有一位數值 然而卻多出了兩位數值z2以及z3
並且z2和z3這多出來的值都沿用前一個數值z1
不知是我作業錯誤 還是 這是一個bug

__________________
至誠能勝天下至偽
至拙能勝天下至巧


由 kkkkkk 在 2006-05-16 20:59 發表:

這不是bug,是用在整數部分時,不能如此行之,看看整個字串長度只有5,怎堪得再減去5或6呢?


由 peter109 在 2006-05-17 08:42 發表:

整個字串長度只有5 怎堪得再減去5或6

只是在想一個問題
系統為何不將多出來的字串長度預設為零 而一定要預設為目前的狀態

__________________
至誠能勝天下至偽
至拙能勝天下至巧


全部時間均為台灣時間, 現在時間為15:16
在這個頁面顯示本主題全部的 10 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.