舍入函数到给定的小数而不使用舍入函数

时间:2015-10-24 08:56:25

标签: python floating-point decimal rounding

我正在尝试编写一个函数来将浮点数舍入到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 个答案:

答案 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