问题描述
我正在尝试编写一个函数来将浮点数舍入到n个小数位。 该函数可以带有一个或两个参数。 如果只有一个参数,则该数字应四舍五入到小数点后两位。
到目前为止,这是我到达的地方:
def roundno(num,point=2):
import math
x=1*(math.pow(10,-point))
round=0
while (num>x):
while(num>0):
round+=num/10
num=num/10
round*=10
round+=num/10
num=num/10
round*=0.1
return round
每次我得到的输出都是无穷大...我哪里出错了?
1楼
我看不到您的算法应该如何对数字取整。 我想类似的策略也可以用,但是您需要在某个地方减去一个...
一种方法是将参数转换为字符串,调整小数点后的位数,然后将字符串转换回浮点数,但是我怀疑您的老师不喜欢这种解决方案。 :)
这是一种简单的算术四舍五入方法:
def roundno(num, point=2):
scale = 10.0 ** point
return int(num * scale) / scale
data = [123, 12.34, 1.234, 9.8765, 98.76543]
for n in data:
print n, roundno(n), roundno(n, 3)
输出
123 123.0 123.0
12.34 12.34 12.34
1.234 1.23 1.234
9.8765 9.87 9.876
98.76543 98.76 98.765
这只会丢弃不需要的数字,但是将其修改为四舍五入并不困难(您不清楚您想要哪种类型的舍入)。
请注意,此函数不会检查point
参数。
确实应该检查它是否为非负整数,否则应使用适当的错误消息引发ValueError
。