75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
|
#!/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)
|