| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9442 人关注过本帖, 1 人收藏
标题:关于数值型转换为字符型的问题
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9798
专家分:26886
注 册:2012-2-5
收藏
得分:0 
以下是引用软件服务在2012-2-15 16:13:31的发言:

XX=1234000000000000
?ALLTRIM(TRANSFORM(XX),"0")
XX=1234000000000000
XX=123400000.0000000
改为:
?ALLTRIM(TRANSFORM(XX),".","")

坚守VFP最后的阵地
2012-02-15 21:08
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 
以下是引用qingfameng在2012-2-15 20:47:59的发言:

回复 26 楼 茵梦湖老师:21 楼和 19 楼是可变的,可在不知小数位数时进行。而 你的 ?? allt(trim( str(xx,30,9) ,"0"),[.]," "),小数超过9位,结果是错的。这就是固定函数的缺陷。


呵呵, 你可以把小数位数放到 9.0版数值型允许的最大值的啊~ 比如(呵呵,仅供参考):

? allt(trim( str(xx,99,18) ,"0"),[.]," ")
2012-02-15 21:11
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
回复楼上:  ? allt(trim( str(xx,99,18) ,"0"),[.]," "),还是不行吧 ! vfp 对数值表示的最大位数,以及多少位后自动科学计数,还有他的自动四舍五入等,都要考虑的。比如:xx=124348.123456789014 时,比你设定的范围小的多啦,但是按你的式子算,数值还是不对呀。出了错不知道!! 但是,用程序段有他的好处,可以在其中再加个判断,出错能知道的。对吗?
2012-02-16 01:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9798
专家分:26886
注 册:2012-2-5
收藏
得分:0 
以下是引用qingfameng在2012-2-16 01:24:10的发言:

回复楼上:  ? allt(trim( str(xx,99,18) ,"0"),[.]," "),还是不行吧 ! vfp 对数值表示的最大位数,以及多少位后自动科学计数,还有他的自动四舍五入等,都要考虑的。比如:xx=124348.123456789014 时,比你设定的范围小的多啦,但是按你的式子算,数值还是不对呀。出了错不知道!! 但是,用程序段有他的好处,可以在其中再加个判断,出错能知道的。对吗?

坚守VFP最后的阵地
2012-02-16 02:31
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 
以下是引用qingfameng在2012-2-16 01:24:10的发言:

回复楼上:  ? allt(trim( str(xx,99,18) ,"0"),[.]," "),还是不行吧 ! vfp 对数值表示的最大位数,以及多少位后自动科学计数,还有他的自动四舍五入等,都要考虑的。比如:xx=124348.123456789014 时,比你设定的范围小的多啦,但是按你的式子算,数值还是不对呀。出了错不知道!! 但是,用程序段有他的好处,可以在其中再加个判断,出错能知道的。对吗?


哎, 我都不知怎么说你好了~ 你所给的例值 本身就是违例(18位), 不符合vfp精确出值的规则的啊~ 还要另外扯到什么科学计数法上去~

我跟贴一般都是不超过1-2贴的, 这次是大为违例了, 最后再回一贴吧, 就此打住~ 就算你19楼的方法 很不错就是了~
 


如果你有兴趣, 你比较1下 如下的4个运行结果吧~ 请仔细比较~


clea
xx=124348.123456789014

**1.
?xx  ,"这是vfp本身 直接打出的值"

**2.
?allt(trim( str(xx,99,18) ,"0"),[.]," ")  ,"这是 allt(trim(str())) 得出的值"

** 21楼程序
?ctransform(xx)  ,"这是 21楼程序 得出的值"


** 19楼程序
messageb("下面接着 运行19楼程序","")

cx=alltrim(str(xx))
t=1
do while val(cx)<>xx
   cx=alltrim(str(xx,len(alltrim(str(xx)))+t,1+t))   
   t=t+1
enddo
   if substr(cx,1,1)="." && 假如是 ‘0’开头的小数
      cx="0"+cx
   endif
?cx  ,"这是 19程序 产生的值"
retu


FUNCTION ctransform  &&21楼子程序
LPARAMETERS nInput
LOCAL lcInput
lcInput=TRANSFORM(nInput)
DO WHILE '.'$lcInput AND RIGHT(lcInput,1)$'.0'
  lcInput=LEFT(lcInput,LEN(lcInput)-1)
ENDDO
RETURN lcInput
2012-02-16 02:47
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
哎!也最后一贴吧!是的,你说的也有道理,程序段应该加个出错判断的。但是如果单纯用一个函数直接求值,会存在不可靠性。错了无提示。所以,两者应该恰当结合才保证数据准确无误吧!
2012-02-16 10:44
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
xx=124348.123456789014
在9.0中,打开调试器,看局部窗口,XX 值为 124348.123456789000
2012-02-16 13:00
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9798
专家分:26886
注 册:2012-2-5
收藏
得分:0 
回复 35楼 茵梦湖
nInput=123.40000
FUNCTION ctransform  &&21楼子程序
LPARAMETERS nInput
LOCAL lcInput
lcInput=TRANSFORM(nInput)
DO WHILE '.'$lcInput AND RIGHT(lcInput,1)$'.0'
  lcInput=LEFT(lcInput,LEN(lcInput)-1)
ENDDO
RETURN lcInput
?VAL(lcInput)
显示结果:123.40

坚守VFP最后的阵地
2012-02-23 22:06
zzzzz513
Rank: 2
等 级:禁止发言
帖 子:14
专家分:19
注 册:2012-1-21
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2012-02-23 22:25
su0527
Rank: 2
等 级:论坛游民
帖 子:452
专家分:79
注 册:2015-1-10
收藏
得分:0 
太有用了
2018-02-28 17:33
快速回复:关于数值型转换为字符型的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023402 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved