赞
踩
大家说round不准,那就自己写个准的呗,其实不难哈哈,我这个虽然有点取巧,但结果绝对是四舍五入,嘎嘎。
我这个思路就是把原小数按小数点分成整数部分和小数部分,
然后如果n>0也就是四舍五入只在小数内发生,那么就只针对小数进行处理,如果n=0那么就是小数向整数有进位的可能,
最后四舍五入完了,把所得的整数部分和小数部分在拼回去转化为浮点
- def newRound(x,n=0):
-
- if isinstance(x,float) ==False: #x不是浮点
- result ='x = '+ str(x) +' 必须为小数 '
- return result
- if n < 0: #n为负数
- result ='n = '+ str(n) +' 不能小于0 '
- return result
-
- y = str(x) #浮点转字符串
- aDotNumList = y.split(".") #字符串按小数点分开成列表
-
- orderNum = aDotNumList[1] #列表只有[0]和[1],[0]是小数点前的数,[1]是小数点后的数
-
- if len(orderNum)>n:
- intY = int(orderNum[n]) #取第n位的数,因为python从0开始所以从n判断就可以了
- else:
- result ='n = '+str(n)+' 必须小于小数点后数字长度 '+ str(len(orderNum))
- return result
-
- if intY < 5 and n > 0: #四舍,n大于0
- aDotNumList[1]=int(orderNum[:n])
- elif intY >= 5 and n > 0: #五入,n大于0
- aDotNumList[1]=int(orderNum[:n]) + 1
- elif intY < 5 and n == 0 : #四舍,n等于0
- aDotNumList[0] = aDotNumList[0]
- aDotNumList[1] = 0
- elif intY >= 5 and n == 0 : #五入,n等于0
-
- if x >0: #如果x为正数
- aDotNumList[0] = int(aDotNumList[0]) + 1
- else: #如果x不为正数
- aDotNumList[0] = int(aDotNumList[0]) - 1
- aDotNumList[1] = 0
-
- x = str(aDotNumList[0]) + "." + str(aDotNumList[1]) #整数部分加上小数部分
- result = float(x) #String转化成float
- return result
改了几次应该没什么问题,如果有问题大家联系我
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。