190530-Python 浮点数精度设置的几种方式

文章目录
  1. 1. round方式
  2. 2. 字符串格式化
  3. 3. math.ceil与math.floor
  4. 4. decimal 精度
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • 记录一下浮点数精度设置的几种方法

    1. round方式

    内置函数,四舍五入,但是和我们一般理解意义上的四舍五入不太一样,先看下使用姿势

    1
    round(digit, num)

    第一个参数是浮点数,第二个参数标识保留的小数个数,第二个参数不传时,标识保留0个小数

    接下来看下为什么说这个方法和传统的四舍五入不一样

    一般的四舍五入实现是 (a + 0.5) 然后取整;但是我们这里却不是这样的

    out

    其规则如下:

    • 碰到舍入的后一位为5的情况,如果要取舍的位数前的数是偶数,则直接舍弃,如果奇数这向上取舍

    2. 字符串格式化

    使用字符串的格式化方式来间接实现我们希望的效果

    1
    "%.xf" % digit

    其中 x 表示具体需要保留的小数位数,digit 表示需要格式化的浮点数,它的实现效果和round一样

    out

    3. math.ceil与math.floor

    对于精度的设置,一般除了四舍五入之外,还有几种常见的就是向上,向下取整,因此 ceilfloor 就比较合适了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from math import ceil, floor

    # ceil 向上取整
    ceil(1.2)
    ceil(-1.2)
    ceil(1.0)

    # floor 向下取整
    floor(1.2)
    floor(-1.2)
    floor(1.0)

    out

    4. decimal 精度

    如果对精度要求比较高,可以考虑使用decimal来操作

    1
    2
    3
    4
    5
    6
    7
    8
    from decimal import *

    def floatAdd(num1, num2, precision=2):
    getcontext().prec = precision # 设置精度
    return float(Decimal(str(num1)) + Decimal(str(num2)))

    print(floatAdd(1.234567, 5.312, 4))
    print(float(Decimal(str(12345.67)) + Decimal(str(125.1))))

    注意上面的precision并不是表示保留多少位小数,而是最终的返回的“有效数字”个数(有效数字打引号,注意不是数学上的有效数字)

    out

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    知识星球

    goals

    # Python

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×