如何获取 round() 函数小数点后的确切位数
How to get the exact number of positions after a decimal for the round() function
假设我有
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
对于正数,可以用一个简单的公式得到小数点左边的位数:
left = int(math.log10(x))+1 if x >= 10 else 1
现在你可以四舍五入了:
r = round(x, n - 1 - left)
浮点数从来没有精确的位数。如果您需要输出精度,只需使用字符串格式来获得正确的字符数:
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
假设我有
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
对于正数,可以用一个简单的公式得到小数点左边的位数:
left = int(math.log10(x))+1 if x >= 10 else 1
现在你可以四舍五入了:
r = round(x, n - 1 - left)
浮点数从来没有精确的位数。如果您需要输出精度,只需使用字符串格式来获得正确的字符数:
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