python中怎么精确20位_Python-根据四舍五入精确保留小数位数的方法

目前,Python版本中关于保留指定小数位数的常用方法有以下几种:

1. 使用round()内置函数

print(round(1.234, 2))

输入结果为:1.23

round()函数中的第一个变量为需要保留指定位数的小数,第二个变量为指定要保留的位数(如上例保留两位小数。该参数默认为0,即不保留小数,直接近似为整数)。

2. 使用decimal模块

from decimal import Decimal

print(Decimal('1.234').quantize(Decimal("0.00")))

输入结果为:1.23

3. 使用%来格式化字符串输出(Python-小知识汇总6-10的第6.1部分)

print('%.2f' % 1.234)

输入结果为:1.23

4. 使用format方法来格式化字符串输出(Python-小知识汇总6-10的第6.2部分)

print('{:.2f}'.format(1.234))

上述代码同样可以写为:print(format(1.234, '.2f'))

输入结果均为:1.23a739ef1ba60c42f0cacc586144e75f71.png

但是,上述四种方法在具体应用时,有可能会出现误差,这和浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。参考地址:https://www.cnblogs.com/anpengapple/p/6507271.html

这里的具体原因我们不展开说,通过几个例子来说明上述几种方法出现误差的时候:1dd40e34239cc9e24106be818590fd7a.png00693a976aeef5985907bbb2f3404f71.png1d48b02a9c5d9f8536648cd95c375a73.pngbf4f7d06903de51fac7b026c5a97ff3c.png

可以看出,当约去的小数为5的时候,上述的几种不同的方法均可能会出现误差。不同方法出现误差的原因我们这里不深究。为了准确形成一种能够根据四舍五入来保留小数位的方法,我们可以通过编写以下代码函数来实现。a739ef1ba60c42f0cacc586144e75f71.png

#代码

def xiaoshufunc(float_a, n):    #float_a为原小数,n为要保留的小数位数

string_a = str(float_a)

a, b, c = string_a.partition('.')    #此时的a、b和c的类型均为字符串类型

cc = c[:n]

if int(c[n])>=5:

ccc = int(cc)+1

else:

ccc = int(cc)

print('小数'+str(float_a)+'保留'+str(n)+'位小数后的结果为:'+a+b+str(ccc))

xiaoshufunc(1.05,1)    #输出结果为1.1

xiaoshufunc(1.15,1)    #输出结果为1.2

xiaoshufunc(1.25,1)    #输出结果为1.3

xiaoshufunc(1.35,1)    #输出结果为1.4

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值