2006年01月23日 星期一 11:42
大家知道 Python自带的 round函数是传统规则,目前流行语言的四舍五入则是银行家规则(从统计学上更科学些) 银行家的规则是这样的 比方说要保留1位小数,原数小数点后只有2位,当小数点后第二位是 5 时就要看前面一位是奇数还是偶数,如果是偶数则将第二位舍弃,如果是奇数则进位。 如果小数点后有效位超过两位,当小数点后第二位是 5 时就直接进位了比方说 round(3.45003,1)这个数是大于3.45的,升为3.5。 如果刚好是3.45则要舍去,结果为3.4 我将规则在此用例子重复一下 round(3.45,1) 传充round 得到 3.5 银行家round得到 3.4 round(3.45002,1) 传统round 得到 3.5 银行家round也得到3.5 round(3.35,1) 传充round 得到 3.4 银行家round得到 3.4 round(3.35002,1) 传统round 得到 3.4 银行家round也得到3.4 -- 开飞机的舒克 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/20060123/a014d380/attachment.htm
2006年01月23日 星期一 12:10
在 06-1-23,魏忠<weizhong2004 at gmail.com> 写道: > 大家知道 Python自带的 round函数是传统规则,目前流行语言的四舍五入则是银行家规则(从统计学上更科学些) > > 银行家的规则是这样的 > 比方说要保留1位小数,原数小数点后只有2位,当小数点后第二位是 5 > 时就要看前面一位是奇数还是偶数,如果是偶数则将第二位舍弃,如果是奇数则进位。 > 如果小数点后有效位超过两位,当小数点后第二位是 5 时就直接进位了比方说 round(3.45003,1)这个数是大于3.45的,升为3.5。 > 如果刚好是3.45则要舍去,结果为3.4 > 我将规则在此用例子重复一下 > > round(3.45,1) > 传充round 得到 3.5 银行家round得到 3.4 > round(3.45002,1) > 传统round 得到 3.5 银行家round也得到3.5 > round(3.35,1) > 传充round 得到 3.4 银行家round得到 3.4 > round(3.35002,1) > 传统round 得到 3.4 银行家round也得到3.4 > 有趣。 -- I like python! My Blog: http://www.donews.net/limodou NewEdit Maillist: http://groups.google.com/group/NewEdit
2006年01月23日 星期一 12:27
这个是在带误差计算中用的方法, 大家做普物实验就是这样算的啊, 还有带误差加法, 乘法, 等等. 在 06-1-23,limodou<limodou at gmail.com> 写道: > 在 06-1-23,魏忠<weizhong2004 at gmail.com> 写道: > > 大家知道 Python自带的 round函数是传统规则,目前流行语言的四舍五入则是银行家规则(从统计学上更科学些) > > > > 银行家的规则是这样的 > > 比方说要保留1位小数,原数小数点后只有2位,当小数点后第二位是 5 > > 时就要看前面一位是奇数还是偶数,如果是偶数则将第二位舍弃,如果是奇数则进位。 > > 如果小数点后有效位超过两位,当小数点后第二位是 5 时就直接进位了比方说 round(3.45003,1)这个数是大于3.45的,升为3.5。 > > 如果刚好是3.45则要舍去,结果为3.4 > > 我将规则在此用例子重复一下 > > > > round(3.45,1) > > 传充round 得到 3.5 银行家round得到 3.4 > > round(3.45002,1) > > 传统round 得到 3.5 银行家round也得到3.5 > > round(3.35,1) > > 传充round 得到 3.4 银行家round得到 3.4 > > round(3.35002,1) > > 传统round 得到 3.4 银行家round也得到3.4 > > > > 有趣。 > > > -- > I like python! > My Blog: http://www.donews.net/limodou > NewEdit Maillist: http://groups.google.com/group/NewEdit > > _______________________________________________ > 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 > > -- ========================================================== A student of Math in Soochow University in China. Intrested in Math, Python, Octave, Lisp, Maxima, Prolog and .NET/MONO. Blog: http://blog.sina.com.cn/blog/1142604745 Wiki: http://wiki.woodpecker.org.cn/moin/Hoxide
2006年01月23日 星期一 12:35
银行就是靠小数点来发财的 在 06-1-23,hoxide Ma<hoxide at gmail.com> 写道: > 这个是在带误差计算中用的方法, 大家做普物实验就是这样算的啊, 还有带误差加法, 乘法, 等等. > > > 在 06-1-23,limodou<limodou at gmail.com> 写道: > > 在 06-1-23,魏忠<weizhong2004 at gmail.com> 写道: > > > 大家知道 Python自带的 round函数是传统规则,目前流行语言的四舍五入则是银行家规则(从统计学上更科学些) > > > > > > 银行家的规则是这样的 > > > 比方说要保留1位小数,原数小数点后只有2位,当小数点后第二位是 5 > > > 时就要看前面一位是奇数还是偶数,如果是偶数则将第二位舍弃,如果是奇数则进位。 > > > 如果小数点后有效位超过两位,当小数点后第二位是 5 时就直接进位了比方说 round(3.45003,1)这个数是大于3.45的,升为3.5。 > > > 如果刚好是3.45则要舍去,结果为3.4 > > > 我将规则在此用例子重复一下 > > > > > > round(3.45,1) > > > 传充round 得到 3.5 银行家round得到 3.4 > > > round(3.45002,1) > > > 传统round 得到 3.5 银行家round也得到3.5 > > > round(3.35,1) > > > 传充round 得到 3.4 银行家round得到 3.4 > > > round(3.35002,1) > > > 传统round 得到 3.4 银行家round也得到3.4 > > > > > > > 有趣。 > > > > > > -- > > I like python! > > My Blog: http://www.donews.net/limodou > > NewEdit Maillist: http://groups.google.com/group/NewEdit > > > > _______________________________________________ > > 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 > > > > > > > -- > ========================================================== > > A student of Math in Soochow University in China. > Intrested in Math, Python, Octave, Lisp, Maxima, Prolog and .NET/MONO. > > Blog: http://blog.sina.com.cn/blog/1142604745 > Wiki: http://wiki.woodpecker.org.cn/moin/Hoxide > > _______________________________________________ > 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 > >
2006年01月23日 星期一 12:49
随便写了一个,没有考虑太多优化和完整性判断 # -*- coding: cp936 -*- def bround(num, pos): print '---', num, '--',pos s = str(num) s_point = s.find('.') + pos base = s[:s_point+1] tail = s[s_point+1:] if tail[0] in '01234': return float(base) elif tail[0] in '6789': return float(base) + 1.0/pow(10,pos) elif len(tail)>1 and int(tail[1:]) > 0: # 50001 return float(base) + 1.0/pow(10,pos) else: # 5 if base[-1] == '.':last_p = base[-2] else: last_p = base[-1] if last_p in '02468': return float(base) else: return float(base) + 1.0/pow(10,pos) print bround(3.44, 1) print bround(3.46, 1) print bround(3.4, 0) print bround(3.6, 0) print bround(3.45,1) #传充round 得到 3.5 银行家round得到 3.4 print bround(3.45002,1) #传统round 得到 3.5 银行家round也得到3.5 print bround(3.35,1) #传充round 得到 3.4 银行家round得到 3.4 print bround(3.35002,1) #传统round 得到 3.4 银行家round也得到3.4 ----------------- 结果: --- 3.44 -- 1 3.4 --- 3.46 -- 1 3.5 --- 3.4 -- 0 3.0 --- 3.6 -- 0 4.0 --- 3.45 -- 1 3.4 --- 3.45002 -- 1 3.5 --- 3.35 -- 1 3.4 --- 3.35002 -- 1 3.4 在06-1-23,limodou <limodou at gmail.com> 写道: > > 在 06-1-23,魏忠<weizhong2004 at gmail.com> 写道: > > 大家知道 Python自带的 round函数是传统规则,目前流行语言的四舍五入则是银行家规则(从统计学上更科学些) > > > > 银行家的规则是这样的 > > 比方说要保留1位小数,原数小数点后只有2位,当小数点后第二位是 5 > > 时就要看前面一位是奇数还是偶数,如果是偶数则将第二位舍弃,如果是奇数则进位。 > > 如果小数点后有效位超过两位,当小数点后第二位是 5 时就直接进位了比方说 round(3.45003,1)这个数是大于3.45的,升为3.5。 > > 如果刚好是3.45则要舍去,结果为3.4 > > 我将规则在此用例子重复一下 > > > > round(3.45,1) > > 传充round 得到 3.5 银行家round得到 3.4 > > round(3.45002,1) > > 传统round 得到 3.5 银行家round也得到3.5 > > round(3.35,1) > > 传充round 得到 3.4 银行家round得到 3.4 > > round(3.35002,1) > > 传统round 得到 3.4 银行家round也得到3.4 > > > > 有趣。 > > > -- > I like python! > My Blog: http://www.donews.net/limodou > NewEdit Maillist: http://groups.google.com/group/NewEdit > > _______________________________________________ > 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 > > -- 欢迎访问我的小站: http://www.2tuzi.com blog : http://blog.2tuzi.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060123/990590fd/attachment.htm
2006年01月23日 星期一 13:19
俺的实现:(由php版本改写而来) #!/usr/bin/env python #coding=utf8 #普通的银行家四舍五入法 def round_(afloat,c): if afloat==0: return 0 r=str(afloat).split('.') dotlen=len(r[1]) if c>=dotlen: return afloat else: flag=r[1][c] if flag!='5': return round(afloat,c) else: a=r[1][:c+1] if r[1]>a: return round(afloat,c) else: return round(round(afloat/2,c)*2,c) -- 开飞机的舒克 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/20060123/ea2f2848/attachment.html
Zeuux © 2025
京ICP备05028076号