Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176546
  • 博文数量: 15
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-06 20:00
文章分类

全部博文(15)

文章存档

2009年(2)

2008年(13)

我的朋友

分类: Python/Ruby

2008-05-19 18:58:23

确定浮点数的保留位数的实现

提示:在统计学生的分数时,因为加权折算的结果不归正,所以要进行下处理再显示。一种是保留一位小数点,四舍五入;有时要设置三段式舍入。需要用python实现。

第一种:只保留一位。设x为要转换的数。最大分数情况为100.0
   使用打印格式来实现。
   >>> x=50.11
   >>> print "5.1f" % x
   50.1
   >>> x="5.1f" %x
   >>> x
   50.1
第二种,按三段来舍入:

## if x=60.0~60.3  => 60.0
## if x=60.4~60.6  => 60.5
## if x=60.7~60.9  => 61.0

def trifloor(xy):
        from math import floor, ceil, modf
        x,y=modf(xy)
        x="%3.1f"%x
        if '0.0' <= x <= '0.3':
            return floor(xy)
        elif '0.3'< x < '0.7':
            return y+0.5
        elif '0.7' <=x <= '0.9':
            return ceil(xy)
        else:
            return floor(xy)

>>> trifloor(60.3)
60.0
>>> trifloor(60.4)
60.5
>>> trifloor(60.8)
61

三、如果小数位为0,则输出整数,否则输出小数
   其中,sumscore ===> 为原始总分
        score ===> 为原始得分
        ret ===> 折算为百分制后的分数
    def score_weighting(score, sumscore):
        ret=score*100.0/sumscore
        ret=trifloor(ret)
        from math import floor
        if ret==floor(ret):
            return ("%d" % ret).strip()
        else:
            return ("%5.1f" % ret).strip()

四、《python核心编程》上发现,如果要保留精度,或四舍五入的话,可以直接使用round模块来实现。
   
    >>> round(1.2)  -> 1.0
    >>> round(1.5)  -> 2.0
    >>> round(1.511,1) -- > round(1.5)
阅读(5958) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~