我正在尝试编写一个函数来将浮点数舍入到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
我每次都输出无穷大......我哪里出错了?
答案 0 :(得分:0)
我看不出你的算法如何对数字进行舍入。我想类似的策略可以起作用,但你需要在那里进行减法...
执行此操作的一种方法是将参数转换为字符串,调整小数点后的位数,然后将字符串转换回浮点数,但我怀疑您的老师不喜欢该解决方案。 :)
这是一种以算术方式进行舍入的简单方法:
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
。