python str转小数(按真实世界四舍五入保留任意小数位) | 您所在的位置:网站首页 › python如何把字符串变成列表 › python str转小数(按真实世界四舍五入保留任意小数位) |
先入个门: Python str转化成数字int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s ) 将序列 s 转换为一个元组 list(s ) 将序列 s 转换为一个列表 chr(x ) 将一个整数转换为一个字符 unichr(x ) 将一个整数转换为Unicode字符 ord(x ) 将一个字符转换为它的整数值 hex(x ) 将一个整数转换为一个十六进制字符串 oct(x ) 将一个整数转换为一个八进制字符串 举个栗子: 小数点后取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) 结果: 5.03 3.56 3.54decimal这个模块在很少用,如上图中,3.555结果为3.56,而3.545结果变为3.54,一个5进位了,一个是5没进位,具体原因不详。 所以不推荐使用这个方法!!! --------------------- 所以我具体讲一下方法二,我也是用的方法二: a=1 a=("%.2f" % a) print a #结果1.00 其中我遇到的问题是a是小数形式的字符串,然后不可以直接'%.xf' x表示四舍五入保留多少位小数。其中a是数字类型才可。包括小数,整数。 但是我是字符串,我就先float转为小数,但是python转小数会出问题,所以先float后,在用方法二保留希望是位数, 就不会丢失精度了。 s1=(float(date[7])+float(date[8])+float(date[9])+float(date[10])) a1=("%.2f" % s1) 直接s1结果丢失精度,再进行一次方法二就四舍五入,符合现实的要求规律。 原文:https://blog.csdn.net/chenmozhe22/article/details/81666831 http://www.cnblogs.com/aiyr/p/6830981.html https://blog.csdn.net/qq_26033611/article/details/80448700 |
CopyRight 2018-2019 实验室设备网 版权所有 |