python实现四舍五入

由于python的round进行四舍五入时是遇六进一而不是遇五进一,所以要从新编写一个算法
具体代码如下
#coding:utf-8

class round(object):

#返回浮点数类型的值
def roundF(self, value, digit):
result = str(value)
if (float(value) < 0):
result = result[1:]
if (result != ''):
indexDec = result.find('.')
if (indexDec > 0):
decimal = result[indexDec + 1:]
decimalCount = len(decimal)
if (decimalCount > digit):
xiaoshu = result[indexDec + digit + 1] # 第digit+1位小数
if (int(xiaoshu) > 4):
result = str(float(value) * -1 + pow(10, digit * -1))
# 存在进位的可能,小数点会移位
indexDec = result.find('.')
result = result[:indexDec + digit + 1]
else:
result = result[:indexDec + digit + 1]
else:
lens = digit - len(result[indexDec:]) + 1
for i in range(lens):
result += '0'
result = float(result) * -1
return result
else:
if (result != ''):
indexDec = result.find('.')
if (indexDec > 0):
decimal = result[indexDec + 1:]
decimalCount = len(decimal)
if (decimalCount > digit):
xiaoshu = result[indexDec + digit + 1] # 第digit+1位小数
if (int(xiaoshu) > 4):
result = str(float(value) + pow(10, digit * -1))
# 存在进位的可能,小数点会移位
indexDec = result.find('.')
result = result[:indexDec + digit + 1]
else:
result = result[:indexDec + digit + 1]
else:
lens = digit - len(result[indexDec:]) + 1
for i in range(lens):
result += '0'
return float(result)

#返回字符串类型的值
def roundStr(self,value, digit):
result = str(value)
if (float(value) < 0):
result = result[1:]
if (result != ''):
indexDec = result.find('.')
if (indexDec > 0):
decimal = result[indexDec + 1:]
decimalCount = len(decimal)
if (decimalCount > digit):
xiaoshu = result[indexDec + digit + 1] # 第digit+1位小数
if (int(xiaoshu) > 4):
result = str(float(value) * -1 + pow(10, digit * -1))
# 存在进位的可能,小数点会移位
indexDec = result.find('.')
result = result[:indexDec + digit + 1]
else:
result = result[:indexDec + digit + 1]
else:
lens = digit - len(result[indexDec:]) + 1
for i in range(lens):
result += '0'
# result = float(result) * -1
return '-'+result
else:
if (result != ''):
indexDec = result.find('.')
if (indexDec > 0):
decimal = result[indexDec + 1:]
decimalCount = len(decimal)
if (decimalCount > digit):
xiaoshu = result[indexDec + digit + 1] # 第digit+1位小数
if (int(xiaoshu) > 4):
dg=pow(10, digit * -1)
result = str(float(value) +dg )
# 存在进位的可能,小数点会移位
indexDec = result.find('.')
result = result[:indexDec + digit + 1]
else:
result = result[:indexDec + digit + 1]
else:
lens = digit - len(result[indexDec:]) + 1
for i in range(lens):
result += '0'
return result

if __name__ == '__main__':
d=round().roundStr(2346.23502,4)
print(d)
原文地址:https://www.cnblogs.com/shuyichao/p/10384332.html