繁体   English   中英

在python中舍入科学记数法

[英]Rounding scientific notation in python

我在 python 中有一个像2.32432432423e25这样的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 中引入的 Python 的 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 不错的函数/想法之上,这里是可以处理最多二维数组的相同函数。 也许有人可以为 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 & 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM