aicheckv2-api/utils/compute.py

75 lines
1.9 KiB
Python
Raw Normal View History

2025-04-11 08:54:28 +08:00
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @version : 1.0
# @Creaet Time : 2022/5/12 17:09
# @File : compute.py
# @IDE : PyCharm
# @desc : 精准计算
from decimal import Decimal
from typing import Union
class Compute:
@staticmethod
def add(precision: int, *args: Union[float, Decimal]) -> float:
"""
相加
:param precision: 精度
"""
result = 0
for i in args:
if i is None:
i = 0
result += Decimal(str(i))
if precision == -1:
return float(result)
return round(float(result), precision)
@staticmethod
def subtract(precision: int, *args: Union[float, Decimal]) -> float:
"""
相减
:param precision: 精度
"""
if args[0] is None:
start = 0
else:
start = args[0]
result = Decimal(str(start))
for i in args[1:]:
if i is None:
i = 0
result -= Decimal(str(i))
if precision == -1:
return float(result)
return round(float(result), precision)
@staticmethod
def divide(precision: int, *args: Union[float, Decimal]) -> float:
"""
除法
:param precision: 精度
"""
result = Decimal(str(args[0]))
for i in args[1:]:
result = result / Decimal(str(i))
if precision == -1:
return float(result)
return round(float(result), precision)
@staticmethod
def multiply(precision: int, *args: Union[float, Decimal]) -> float:
"""
乘法
:param precision: 精度
"""
result = Decimal(str(1))
for i in args:
if i is None:
i = 1
result = result * Decimal(str(i))
if precision == -1:
return float(result)
return round(float(result), precision)