如何获得round()函数的小数后的确切位置数

时间:2015-01-12 20:01:39

标签: python algorithm

让我们说我有

float_number = 3.05321355"

我想将结果限制为5个字符(将其转换为字符串后)。因此,结果将是从左边开始计算的5个字符(包括小数点),这将是我想要添加到round()函数的小数点后面的位置。

float_number的5个字符版本:

float_number_5_char = 3.053

小数点后面的 3 小数位,所以这就是我要舍入的位置。

round(float_number, 3)

是否有算法或方法可以找出最多5个字符的任何浮点的小数位数?

另一个例子:

float_1 = 32.53235
float_1_5_char = 32.53

所以这是小数点后的 2 小数位。

float_2 = 0.53235
float_2_5_char = 0.532

所以这是点之后的 3 小数位。

我试图想出这样的东西:

round_place = len(str(value)) - len(str(value)[:5])

但这对所有浮动数字都不起作用。

编辑:函数的前提条件是值为0-999.99

2 个答案:

答案 0 :(得分:3)

对于正数,您可以使用简单的公式获得小数点左边的位数:

left = int(math.log10(x))+1 if x >= 10 else 1

现在你可以圆了:

r = round(x, n - 1 - left)

答案 1 :(得分:2)

浮点数从不具有确切的位数。如果您需要输出精度,只需使用字符串格式化正确的字符数:

five_chars = lambda num: ("%.3f" if num<1 else "%.5g") % num
float1 = five_chars(32.53235)
float2 = five_chars(0.53235)

给出:

32.53
0.532