| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9450 人关注过本帖, 1 人收藏
标题:关于数值型转换为字符型的问题
只看楼主 加入收藏
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
VFP 9.0 下,程序解决
n=123.40000
?ctransform(n)
RETURN
FUNCTION ctransform
LPARAMETERS nInput
LOCAL lcInput
lcInput=TRANSFORM(nInput)
DO WHILE '.'$lcInput AND RIGHT(lcInput,1)$'.0'
  lcInput=LEFT(lcInput,LEN(lcInput)-1)
ENDDO
RETURN lcInput

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2012-02-14 22:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用Tiger5392在2012-2-14 22:36:58的发言:

VFP 6.0 下:Transform(nExpress)
VFP6.0上通用,谢谢楼上的朋友,你是第二个给出标准答案的。前后8天时间

坚守VFP最后的阵地
2012-02-14 22:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用Tiger5392在2012-2-14 22:42:34的发言:

VFP 9.0 下,程序解决
n=123.40000
?ctransform(n)
RETURN
FUNCTION ctransform
LPARAMETERS nInput
LOCAL lcInput
lcInput=TRANSFORM(nInput)
DO WHILE '.'$lcInput AND RIGHT(lcInput,1)$'.0'
  lcInput=LEFT(lcInput,LEN(lcInput)-1)
ENDDO
RETURN lcInput
收藏了,谢谢朋友

坚守VFP最后的阵地
2012-02-14 22:52
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
请楼主注意一点:19楼没用 transform,而采用的是递推法,目的是尽量容易阅读。他对 18 位内的任何小数,不管前后是否有零,都使用的。可再看看。
2012-02-15 12:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用qingfameng在2012-2-15 12:13:14的发言:

请楼主注意一点:19楼没用 transform,而采用的是递推法,目的是尽量容易阅读。他对 18 位内的任何小数,不管前后是否有零,都使用的。可再看看。
谢谢朋友提醒

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

看来使用一个函数一步解决不好办。用个笨法子试试
xx=123.9870654321 && 假如数据是常规表示法 (总位数在 18 位内的任意数)
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


回复21楼/19楼~  

按理, 一步解决 应该是难不住你们2位的吧?? 估计你俩没有怎么用心去想吧??

9.0版 不用子程序, 而1步到位的方法可用str(), 也可用tran() (代码需略作改动)~ 例:

xx=123.40000
?? allt(trim( str(xx,30,9) ,"0"),[.]," ")

xx=123000.0000
?? allt(trim( str(xx,30,9) ,"0"),[.]," ")




 

[ 本帖最后由 茵梦湖 于 2012-2-15 14:32 编辑 ]
2012-02-15 14:31
sywzs
Rank: 10Rank: 10Rank: 10
来 自:辽宁
等 级:贵宾
威 望:15
帖 子:508
专家分:1725
注 册:2009-5-13
收藏
得分:0 
xx=123.400
xx=123400

?ALLTRIM(TRIM(TRIM(STR(xx,18,5),"0"),"."))
2012-02-15 14:52
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用sywzs在2012-2-15 14:52:17的发言:

xx=123.400
xx=123400

?ALLTRIM(TRIM(TRIM(STR(xx,18,5),"0"),"."))
XX=123.4000000000000
?ALLTRIM(TRANSFORM(XX),"0")

[ 本帖最后由 sdta 于 2012-2-15 15:23 编辑 ]

坚守VFP最后的阵地
2012-02-15 15:20
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:0 
以下是引用sdta在2012-2-15 15:20:27的发言:

XX=123.4000000000000
?ALLTRIM(TRANSFORM(XX),"0")
XX=1234000000000000
?ALLTRIM(TRANSFORM(XX),"0")
2012-02-15 16:13
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
回复 26 楼 茵梦湖老师:21 楼和 19 楼是可变的,可在不知小数位数时进行。而 你的 ?? allt(trim( str(xx,30,9) ,"0"),[.]," "),小数超过9位,结果是错的。这就是固定函数的缺陷。

[ 本帖最后由 qingfameng 于 2012-2-15 21:02 编辑 ]
2012-02-15 20:47
快速回复:关于数值型转换为字符型的问题
数据加载中...
 
   



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

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