如何在 Python 中移动小数位?

问题描述 投票:0回答:4

我目前正在使用以下方法来计算两次的差异。出-入非常快,因此我不需要显示小时和分钟,反正都是 0.00。我实际上如何移动 Python 中的小数位?

def time_deltas(infile): 
    entries = (line.split() for line in open(INFILE, "r")) 
    ts = {}  
    for e in entries: 
        if " ".join(e[2:5]) == "OuchMsg out: [O]": 
            ts[e[8]] = e[0]    
        elif " ".join(e[2:5]) == "OuchMsg in: [A]":    
            in_ts, ref_id = e[0], e[7] 
            out_ts = ts.pop(ref_id, None) 
            yield (float(out_ts),ref_id[1:-1], "%.10f"%(float(in_ts) - float(out_ts)))

INFILE = 'C:/Users/kdalton/Documents/Minifile.txt'
print list(time_deltas(INFILE))
python decimal
4个回答
22
投票

就像你在数学中做的一样

a = 0.01;
a *= 10; // shifts decimal place right
a /= 10.; // shifts decimal place left

6
投票
def move_point(number, shift, base=10):
    """
    >>> move_point(1,2)
    100
    >>> move_point(1,-2)
    0.01
    >>> move_point(1,2,2)
    4
    >>> move_point(1,-2,2)
    0.25
    """
    return number * base**shift

1
投票

或使用datetime模块

>>> import datetime
>>> a = datetime.datetime.strptime("30 Nov 11 0.00.00", "%d %b %y %H.%M.%S")
>>> b = datetime.datetime.strptime("2 Dec 11 0.00.00", "%d %b %y %H.%M.%S")
>>> a - b
datetime.timedelta(-2)

1
投票

扩展已接受的答案;这是一个函数,可以移动你给它的任何数字的小数位。在小数位参数为 0 的情况下,返回原始数字。为了保持一致性,始终返回浮点类型。

*编辑:修复了由于浮点表示而导致的不准确情况。

    def moveDecimalPoint(num, places):
        '''Move the decimal place in a given number.

        Parameters:
            num (int/float): The number in which you are modifying.
            places (int): The number of decimal places to move.
        
        Returns:
            (float)
        
        Example:
            moveDecimalPoint(11.05, -2) #returns: 0.1105
        '''
        from decimal import Decimal

        num_decimal = Decimal(str(num))  # Convert the input number to a Decimal object
        scaling_factor = Decimal(10 ** places)  # Create a scaling factor as a Decimal object

        result = num_decimal * scaling_factor  # Perform the operation using Decimal objects
        return float(result)  # Convert the result back to a float
© www.soinside.com 2019 - 2024. All rights reserved.