我在Python中有一个数字,例如2.32432432423e25
,它是计算的结果。
我想将其四舍五入到小数点后3位以获得输出:
2.324e25
我曾尝试使用:
x = 2.32432432423e25
number_rounded = round(x, 3)
但是当我打印number_rounded
时,它输出的数字格式与x
相同。
我如何将x
的显示限制为仅4个有效数字?
我在Python中有一个数字,例如2.32432432423e25
,它是计算的结果。
我想将其四舍五入到小数点后3位以获得输出:
2.324e25
我曾尝试使用:
x = 2.32432432423e25
number_rounded = round(x, 3)
但是当我打印number_rounded
时,它输出的数字格式与x
相同。
我如何将x
的显示限制为仅4个有效数字?
'{:0.3e}'.format(2.32432432423e25)
原因是round
函数是用来指定小数点后的位数,但当您的数字是 O(25)级别时,这不是很相关。如果您想使用 Python 3.6 引入的 f-string 语法,请在变量后面指定格式,用 :
分隔,例如:
>>> res = 2.32432432423e25
>>> f'The result is {res:.3e}'
'The result is 2.324e+25'
我在寻找答案时,大部分都是字符串的回答。虽然通常最好的方法是处理这个问题(因为浮点数总是根据其定义精度四舍五入),但有时你希望将浮点数舍入到给定的小数精度(再加上任何浮点数不确定性)而我找不到一个好的答案。以下是我想到的,我相信它处理了所有可能的情况:输入为零,输入小于1,输入大于1,对于正数和负数:
def precision_round(number, digits=3):
power = "{:e}".format(number).split('e')[1]
return round(number, -(int(power) - digits))
在@Josh Duran的好函数/想法基础上,这里是同样的函数,可以处理高达2-D数组。也许有人可以修改它以适应ndarrays。
def precision_round(numbers, digits = 3):
'''
Parameters:
-----------
numbers : scalar, 1D , or 2D array(-like)
digits: number of digits after decimal point
Returns:
--------
out : same shape as numbers
'''
import numpy as np
numbers = np.asarray(np.atleast_2d(numbers))
out_array = np.zeros(numbers.shape) # the returning array
for dim0 in range(numbers.shape[0]):
powers = [int(F"{number:e}".split('e')[1]) for number in numbers[dim0, :]]
out_array[dim0, :] = [round(number, -(int(power) - digits))
for number, power in zip(numbers[dim0, :], powers)]
# returning the original shape of the `numbers`
if out_array.shape[0] == 1 and out_array.shape[1] == 1:
out_array = out_array[0, 0]
elif out_array.shape[0] == 1:
out_array = out_array[0, :]
return out_array
power = F"{number:e}".split('e')[1]
- Alireza Amani