1

Konu: Sahanın decimal boyu.

Numerik bir field'in (view veya cursor) decimal boyunu nasıl buluruz?

2 Son düzenleyen, altun (06.02.2007 15:29:20)

Re: Sahanın decimal boyu.

İstediğin sonucu veren bir fonksiyon olup olmadığını bilmiyorum ama aşağıdaki komutlarla decimal hane sayısını hesaplayabilmek mümkün.

nSayi = 0.000  && curTablo.miktar

? len(strextract(transform(nSayi-icase(nSayi=0,1,0)), '.'))

veya

? len(transform((mod(nSayi-icase(nSayi=0,1,0), 1))))-2

Fonksiyon set decimal to dan olumsuz etkilenmiyor. Ama yinede metinin dediği gibi istenmeyen sonuçlar çıkabilir.

3

Re: Sahanın decimal boyu.

Haklısın bunu direkt veren fonksiyon yoksa bunlarla olabilir.
Teşekkürler.

4

Re: Sahanın decimal boyu.

Fakat 0.00 için işe yaramadı bu yöntem

5 Son düzenleyen, metin (06.02.2007 14:33:23)

Re: Sahanın decimal boyu.

o şekilde field bilgisini alamazsın. bunu kullan:

Visual Fox Pro
?ftype("borc",.t.)

 
FUNCTION ftype
LPARAMETERS xfname,xfull_type
    xfname=UPPER(PADR(m.xfname,10,"*"))
LOCAL ARRAY aDummy[1]
LOCAL undefined,xret,onerr,xret3,xret4,xftop,i
  onerr=ON("error")
ON ERROR undefined=.t.
xftop=AFIELDS(aDummy)
   FOR m.i=1 TO m.xftop
      adummy(m.i,1)=PADR(adummy(m.i,1),10,"*")
   NEXT
xret=aDummy[ASCAN(aDummy,m.xfname,1,m.xftop,1,9),2]
  IF xfull_type
    xret3=TRANSFORM(aDummy[ASCAN(aDummy,m.xfname,1,m.xftop,1,9),3])+","
    xret4=TRANSFORM(aDummy[ASCAN(aDummy,m.xfname,1,m.xftop,1,9),4])
  ENDIF
  ON ERROR &onerr
IF m.undefined
  RETURN "U"
ELSE
  IF xfull_type AND !INLIST(m.xret,"D","T","I")
     IF m.xret="B"
        RETURN m.xret+"("+xret4+")"
     ELSE
        RETURN m.xret+"("+xret3+xret4+")"
     ENDIF
ELSE
     RETURN m.xret
ENDIF
ENDIF
Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

6 Son düzenleyen, ctapan (06.02.2007 17:17:18)

Re: Sahanın decimal boyu.

En son bununla çözdüm. Herkese teşekkürler

Visual Fox Pro
FUNCTION deciboyu (param1)

AFIELDS(ladecibul)
lnyeri=ASCAN(ladecibul,UPPER(param1))
IF lnyeri>0
    lnyeri=INT(lnyeri/18)+1
    RETURN ladecibul(lnyeri,4)
ELSE
    RETURN -1
ENDIF

7

Re: Sahanın decimal boyu.

Cemal,
Kod versiyon bagimli. VFP7'de calismaz, gelecekteki bir versiyonda afields() donen kolon sayisi degisirse gene calismaz. Soyle daha iyi gibi:

Visual Fox Pro
FUNCTION deciboyu(param1)

LOCAL ARRAY laDeciBul[1]
AFIELDS(ladecibul)
lnyeri=ASCAN(ladecibul,m.param1,1,-1,1,1+2+4+8)
IF m.lnyeri>0
  return laDeciBul[m.lnYeri,4]
ELSE
  RETURN -1
ENDIF

8

Re: Sahanın decimal boyu.

Evet bu daha güzel oldu. Teşekkürler