freqtrade_origin/freqtrade/util/formatters.py

50 lines
1.6 KiB
Python
Raw Normal View History

2024-01-06 11:46:30 +00:00
from freqtrade.constants import DECIMAL_PER_COIN_FALLBACK, DECIMALS_PER_COIN
def decimals_per_coin(coin: str):
"""
Helper method getting decimal amount for this coin
example usage: f".{decimals_per_coin('USD')}f"
:param coin: Which coin are we printing the price / value for
"""
return DECIMALS_PER_COIN.get(coin, DECIMAL_PER_COIN_FALLBACK)
def strip_trailing_zeros(value: str) -> str:
"""
Strip trailing zeros from a string
:param value: Value to be stripped
:return: Stripped value
"""
2024-05-12 14:56:05 +00:00
return value.rstrip("0").rstrip(".")
2024-01-06 11:46:30 +00:00
def round_value(value: float, decimals: int, keep_trailing_zeros=False) -> str:
"""
Round value to given decimals
:param value: Value to be rounded
:param decimals: Number of decimals to round to
:param keep_trailing_zeros: Keep trailing zeros "222.200" vs. "222.2"
:return: Rounded value as string
"""
val = f"{value:.{decimals}f}"
if not keep_trailing_zeros:
val = strip_trailing_zeros(val)
2024-01-06 11:46:30 +00:00
return val
2024-05-12 14:56:05 +00:00
def fmt_coin(value: float, coin: str, show_coin_name=True, keep_trailing_zeros=False) -> str:
2024-01-06 11:46:30 +00:00
"""
2024-01-06 15:02:47 +00:00
Format price value for this coin
2024-01-06 11:46:30 +00:00
:param value: Value to be printed
:param coin: Which coin are we printing the price / value for
:param show_coin_name: Return string in format: "222.22 USDT" or "222.22"
:param keep_trailing_zeros: Keep trailing zeros "222.200" vs. "222.2"
:return: Formatted / rounded value (with or without coin name)
"""
val = round_value(value, decimals_per_coin(coin), keep_trailing_zeros)
if show_coin_name:
val = f"{val} {coin}"
return val