回 帖 发 新 帖 刷新版面

主题:[求助]如何既保留小数位数又能截取固定字符长度?

小女子还要大侠们帮帮忙了,多谢多谢啦,呵呵。

有一个dbf表,下有三列,A为数值型的,B、C均为字符型的,
其中A列的小数位数均为3位,小于等于9999.999。
         A                           B                          C
      12.123                        ML                                     
     125.100                        MG                           
    1320.020                        L                        
     101.000                        G  
       3.005                        MG 
       1.500                        G 
       4.000                        ML
      15.000                        UG
       0.050                        ML       
       0.125                        G
       0.100                        G
       0.901                        MG                    

        
      .....                        .... 

      以下省略

呵呵,菜鸟俺的表述能力实在是太差了,再描述一遍,呵呵。

现在想将C列用‘A+ ' '+B’替换,但是需要达到如下结果,即

截取A列的从左数四个字符([color=FF0000]数字不四舍五入[/color],截止到多少算多少),

[color=FF0000]对于 >=100&<=9999.999 的数值,取其整数;


对于 >=10&<=99.999    的数值,取从左至右四个字符;  
注意:
对于实际小数点位数为0的数值,直接取整数,如15.000、39.000、89.000等,直接取其整数15、39、89。


对于 >=1&<=9.999      的数值,取从左至右四个字符;  
注意:
对于实际小数点位数为0位的数值,直接取整数,如1.000、3.000、8.000等,直接取其整数1、3、8。
对于实际小数点位数为1位的数值,直接取到小数点后一位,如3.500、7.900、9.300等,直接取到小数点后一位,即3.5、7.9、9.3。


对于 >=0.001&<=0.999  的数值,取从左至右四个字符;  
注意:
对于实际小数位数为1位的,如0.600、0.900、0.800等,直接取到小数点后一位,即0.6、0.9、0.8.[/color]

C列想要达到的替换结果如下

12.1 ML
125 MG
1320 L
101 G
3.00 MG
1.5 G
4 ML
15 UG
0.05 ML
0.12 G
0.1 G
0.90 MG



如果单纯用命令
replace all C with left(allt(str(A,8,3)),4)+' '+allt(B)
达不到我想要的结果。

请各位大侠帮帮忙啊,多谢多谢。
在线等,请大家伸出援手啊,呵呵。





回复列表 (共17个回复)

11 楼


replace all C with ICASE(a<1,left(ALLTRIM(STR(a,4,2)),4),INT(a)=a,ALLTRIM(STR(INT(a))),left(ALLTRIM(STR(a,6,1)),4))+' '+allt(B)

12 楼

除了0.100外,0.200是不是也要0.20?还有别的例外吗?
replace all C with ICASE(a<1.and.len(alltri(STR(a,5,3)))=1,left(ALLTRIM(STR(a,3,1)),3),a<1,left(ALLTRIM(STR(a,4,2)),4),INT(a)=a,ALLTRIM(STR(INT(a))),left(ALLTRIM(STR(a,6,1)),4))
+' '+allt(B)



13 楼

TO 作者:qjbzjp

   大侠,我的表述能力不太强,呵呵。现在我把原帖改了一下,您再看看。多谢多谢。

14 楼

replace all C with ICASE(a<0.1.and.OCCURS("0",STR(a,5,3))=3,ALLTRIM(STR(a,4,2)),a<0.1,ALLTRIM(STR(a,5,3)),a<1.and.OCCURS("0",STR(a,5,3))=3,left(ALLTRIM(STR(a,3,1)),3),a<1,left(ALLTRIM(STR(a,6,4)),4),INT(a)=a,ALLTRIM(STR(INT(a))),left(ALLTRIM(STR(a,6,1)),4))
+' '+allt(B)

15 楼

问题本身就是错的!!!
3.005或许符合题意,可13.005你想如何满足你自己所提出的要求???

16 楼


呵呵,那就取13.0呀。

17 楼

TO 作者:sywzs,qjbzjp,妙计山人

    感谢各位大侠的鼎力相助,多谢多谢,:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册