| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 480 人关注过本帖
标题:求!!!精确计算两个80位数据相加减 原程序 vfp
只看楼主 加入收藏
单色调
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-2-22
结帖率:0
收藏
已结贴  问题点数:10 回复次数:3 
求!!!精确计算两个80位数据相加减 原程序 vfp
  请求哪位高手帮忙

[ 本帖最后由 单色调 于 2011-2-22 15:47 编辑 ]
2011-02-22 15:46
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:3 
VFP本身的精度是没有那么多位,可以将数据分成几段来运算,分段运算时需要考虑进位或退位的问题。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-02-22 17:19
xmlz
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:294
专家分:1392
注 册:2010-8-29
收藏
得分:3 
可以使用包含超过80个元素的数组,每个元素存储一位。
2011-02-23 19:32
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:3 
SET TALK OFF
a='2222222221111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222111112348888'
b='1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111165'
?minus(a,b)
RETURN

FUNCTION minus
LPARAMETERS cStr1,cStr2
IF TYPE('cStr1')#'C' OR !ALLTRIM(cStr1)==CHRTRAN(cStr1,CHRTRAN(cStr1,'0123456789',''),'')
  RETURN ''
ENDIF
IF TYPE('cStr2')#'C' OR !ALLTRIM(cStr2)==CHRTRAN(cStr2,CHRTRAN(cStr2,'0123456789',''),'')
  RETURN ''
ENDIF
LOCAL lnLen,lcStra,lcStrb,lcSign,lcRes,lnCnt,llIs,lnDegit1,lnDegit2
lnLen=MAX(LEN(ALLTRIM(cStr1)),LEN(ALLTRIM(cStr2)))
lcStra=MAX(PADL(ALLTRIM(cStr1),lnLen,' '),PADL(ALLTRIM(cStr2),lnLen,' '))
lcStrb=MIN(PADL(ALLTRIM(cStr1),lnLen,' '),PADL(ALLTRIM(cStr2),lnLen,' '))
lcSign=IIF(lcStra==PADL(ALLTRIM(cStr1),lnLen,' '),'','-')
lcRes=''
llIs=.F.
FOR lnCnt=1 TO lnLen
  lnDegit1=VAL(SUBSTR(lcStra,lnLen-lnCnt+1,1))
  lnDegit2=VAL(SUBSTR(lcStrb,lnLen-lnCnt+1,1))
  DO CASE
  CASE llIs=.T. AND lnDegit1-1>=lnDegit2
    lcRes=STR(lnDegit1-1-lnDegit2,1)+lcRes
    llIs=.F.
  CASE llIs=.T. AND lnDegit1-1< lnDegit2
    lcRes=STR(lnDegit1-1+10-lnDegit2,1)+lcRes
    llIs=.T.
  CASE llIs=.F. AND lnDegit1  >=lnDegit2
    lcRes=STR(lnDegit1-lnDegit2,1)+lcRes
    llIs=.F.
  CASE llIs=.F. AND lnDegit1  < lnDegit2
    lcRes=STR(lnDegit1+10-lnDegit2,1)+lcRes
    llIs=.T.
  ENDCASE
ENDFOR
DO WHILE lcRes='0'
  lcRes=SUBSTR(lcRes,2)
ENDDO
RETURN lcSign+lcRes

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2011-02-26 17:57
快速回复:求!!!精确计算两个80位数据相加减 原程序 vfp
数据加载中...
 
   



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

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