zoukankan      html  css  js  c++  java
  • python中小数点后取2位(四舍五入)以及取2位(四舍五不入)

    一.小数点后取2位(四舍五入)的方法
    方法一:round()函数
    其实这个方法不推荐大家使用,查询资料发现里面的坑其实很多,python2和python3里面的坑还不太一样,在此简单描述一下python3对应的坑的情况。

    a = 1.23456
    b = 2.355
    c = 3.5
    d = 2.5
    print(round(a, 3))
    print(round(b, 2))
    print(round(c))
    print(round(d))

    结果:

    1.235 # 1.23456最终向前进位了
    2.35 # 2.355居然没进位
    4 # 最终3.5居然变为4了
    2 # 最终2.5取值变为2

    (1)通过上面的函数,看着是不是很晕,感觉round(x,n)函数是否进位也没看出是啥规律
    (2)round(x,n)函数中,是否进位或四舍五入,取决于n位以及n+1位小数的值
    (3)只有当n+1位数字是5的时候,容易混淆,如果n为偶数,则n+1位数是5,则进位,例如round(1.23456,3)最终变为1.235
    (4)如果n为奇数,则n+1位是数5,那不进位,例如round(2.355,2),最终为2.35
    (5)如果n为0,即没有填写n的时候,最终结果与上面相反,即整数部分为偶数的时候,小数位5不进位,例如(round(2.5)变为2)。
    (6)整数部分为奇数的时候,小数位5进位。(round(3.5)变为4)
    看完如上的部分,感觉是不是更晕了,所以round()不推荐使用,目前也不知道设计这个函数的目的在哪里?有谁知道麻烦告知一下?

    方法二:’%.2f’ %f 方法
    f = 1.23456

    print('%.4f' % f)
    print('%.3f' % f)
    print('%.2f' % f)

    结果:

    1.2346
    1.235
    1.23

    (1)这个方法是最常规的方法,方便实用,居家旅行必备!
    方法三:Decimal()函数
    from decimal import Decimal

    aa = Decimal('5.026').quantize(Decimal('0.00'))
    bb = Decimal('3.555').quantize(Decimal('0.00'))
    cc = Decimal('3.545').quantize(Decimal('0.00'))print(aa)

    print(bb)
    print(cc)
    9
    结果:

    5.03
    3.56
    3.54
    decimal这个模块在很少用,如上图中,3.555结果为3.56,而3.545结果变为3.54,一个5进位了,一个是5没进位,具体原因不详。
    所以不推荐使用这个方法!!!

    二.小数点后取2位(四舍五不入)的方法
    通过计算的途径,很难将最终结果截取2位,我们直接想到的就是如果是字符串,直接截取就可以了。
    例如

    num = '1234567' #字符串num
    print(num[:3])

    结果:
    123

    如果是123.456取2位小数(截取2位小数),值需要把小数点右边的当做字符串截取即可
    partition()函数(将字符串根据字符串切割):
    http://www.runoob.com/python/att-string-partition.html

    num = '123.4567'
    num_str = num.partition(".")
    print(num_str)

    结果:
    ('123', '.', '4567') # 三个元素的元祖

    拼接字符串:format()函数的使用
    https://blog.csdn.net/i_chaoren/article/details/77922939

    方法一:
    def get_two_float(f_str, n):
    a, b, c = f_str.partition('.')
    c = c[:n]
    return ".".join([a, c])


    num = "123.4567" #(1)隐患一,传入函数的是字符串
    print(get_two_float(num, 2))

    num2 = '123.4' # (2)隐患二,如果传入的字符串小数位小于最终取的位数
    print(get_two_float(num2, 2))
    结果:

    123.45
    123.4
    最终版本:

    def get_two_float(f_str, n):
    f_str = str(f_str) # f_str = '{}'.format(f_str) 也可以转换为字符串
    a, b, c = f_str.partition('.')
    c = (c+"0"*n)[:n] # 如论传入的函数有几位小数,在字符串后面都添加n为小数0
    return ".".join([a, c])


    num = 123.4567
    print(get_two_float(num, 2))

    num2 = 123.4
    print(get_two_float(num2, 2))

  • 相关阅读:
    CodeForces 734F Anton and School
    CodeForces 733F Drivers Dissatisfaction
    CodeForces 733C Epidemic in Monstropolis
    ZOJ 3498 Javabeans
    ZOJ 3497 Mistwald
    ZOJ 3495 Lego Bricks
    CodeForces 732F Tourist Reform
    CodeForces 732E Sockets
    CodeForces 731E Funny Game
    CodeForces 731D 80-th Level Archeology
  • 原文地址:https://www.cnblogs.com/klb561/p/10029946.html
Copyright © 2011-2022 走看看