2006年01月02日 星期一 11:57
写一个函数,该函数接受三个参数,分别为 分子,分母,结果位数
该函数可以计算任意数除法到任意精度(自定义小数位数)
如果小数部分循环的,可以只列出第一次循环的部分,然后注明后面循环
俺写了一个(目前还不能处理循环结)
def cf(fz,fm,ws=1000):
jg=[];
for i in xrange(ws):
if i==0:
zs,ys=divmod(fz,fm)
zs=str(zs)
jg=[zs,'.']
else:
ZS,ys=divmod(fz,fm)
jg.append(str(ZS))
if ys==0: break
fz=ys*10
return ''.join(jg)
--
开飞机的舒克
http://www.lvye.org/shuke
msn:weizhong at netease.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060102/12861d77/attachment.html
2006年01月02日 星期一 13:24
难在那个任意选取位数上 大牛们做起来肯定特简单 我看了一下魏忠兄的程序 哈哈,随便借机了解了一下divmod函数。 至于那个str函数还看的不是很懂 看帮助又觉得蒙,自己动手用,又发现无论浮点数还是整型数据,在w=str(w)之后没什么变化 实在看不出作用是? 在06-1-2,魏忠 <weizhong2004 at gmail.com> 写道: > > 写一个函数,该函数接受三个参数,分别为 分子,分母,结果位数 > 该函数可以计算任意数除法到任意精度(自定义小数位数) > 如果小数部分循环的,可以只列出第一次循环的部分,然后注明后面循环 > 俺写了一个(目前还不能处理循环结) > > def cf(fz,fm,ws=1000): > jg=[]; > for i in xrange(ws): > if i==0: > zs,ys=divmod(fz,fm) > zs=str(zs) > jg=[zs,'.'] > else: > ZS,ys=divmod(fz,fm) > jg.append(str(ZS)) > if ys==0: break > fz=ys*10 > return ''.join(jg) > > -- > > 开飞机的舒克 > http://www.lvye.org/shuke > msn:weizhong at netease.com > _______________________________________________ > python-chinese > Post: send python-chinese at lists.python.cn > Subscribe: send subscribe to python-chinese-request at lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request at lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060102/e888c966/attachment.htm
2006年01月13日 星期五 23:18
下面是我的程序,可以标出循环节的
BTW,土问一句:join()什么语义?我用return intPart.join(frac)不对
#!/usr/bin/python
# -*- coding: utf-8 -*-
##写一个函数,该函数接受三个参数,分别为 分子,分母,结果位数
##该函数可以计算任意数除法到任意精度(自定义小数位数)
##如果小数部分循环的,可以只列出第一次循环的部分,然后注明后面循环
def div_w_prec(dividend, divisor, precision=1000):
div, mod= divmod(dividend, divisor)
intPart = str(div) + '.'
pos = 0; modDict = {}; frac = []
while pos < precision and mod != 0 :
modDict[mod] = pos
mod *= 10
div, mod = divmod (mod, divisor)
frac.append(str(div))
if mod in modDict.keys(): break
pos += 1
if mod in modDict.keys(): # 发现循环
frac.insert(modDict[mod],'(')
frac.append(')')
return intPart + ''.join(frac)
print div_w_prec(97, 37)
--
regards,
yzhh
2006年01月14日 星期六 00:47
ok, join知道什么意思了,现在的问题是:有没有更直接的做法,比如concat(list)? 另外,我前面的程序如果要接受浮点数作参数,需要把两处“str(div)”改成“str(int(div))” -- regards, yzhh
Zeuux © 2025
京ICP备05028076号