diff --git a/freqtrade/misc.py b/freqtrade/misc.py index bd4f17d05..5b04d815b 100644 --- a/freqtrade/misc.py +++ b/freqtrade/misc.py @@ -27,6 +27,20 @@ def decimals_per_coin(coin: str): return DECIMALS_PER_COIN.get(coin, DECIMAL_PER_COIN_FALLBACK) +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 = val.rstrip('0').rstrip('.') + return val + + def round_coin_value( value: float, coin: str, show_coin_name=True, keep_trailing_zeros=False) -> str: """ @@ -38,8 +52,7 @@ def round_coin_value( :return: Formatted / rounded value (with or without coin name) """ val = f"{value:.{decimals_per_coin(coin)}f}" - if not keep_trailing_zeros: - val = val.rstrip('0').rstrip('.') + val = round_value(value, decimals_per_coin(coin), keep_trailing_zeros) if show_coin_name: val = f"{val} {coin}" diff --git a/tests/test_misc.py b/tests/test_misc.py index 7de1adbbc..8ce7d0ea7 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -9,8 +9,8 @@ import pytest from freqtrade.misc import (dataframe_to_json, decimals_per_coin, deep_merge_dicts, file_dump_json, file_load_json, is_file_in_dir, json_to_dataframe, pair_to_filename, - parse_db_uri_for_logging, plural, round_coin_value, safe_value_fallback, - safe_value_fallback2) + parse_db_uri_for_logging, plural, round_coin_value, round_value, + safe_value_fallback, safe_value_fallback2) def test_decimals_per_coin(): @@ -37,6 +37,18 @@ def test_round_coin_value(): assert round_coin_value(222.2, 'USDT', False, True) == '222.200' +def test_round_value(): + + assert round_value(222.222222, 3) == '222.222' + assert round_value(222.2, 3) == '222.2' + assert round_value(222.00, 3) == '222' + assert round_value(222.12745, 3) == '222.127' + assert round_value(0.1274512123, 8) == '0.12745121' + assert round_value(0.1274512123, 5) == '0.12745' + assert round_value(222.2, 3, True) == '222.200' + assert round_value(222.2, 0, True) == '222' + + def test_file_dump_json(mocker) -> None: file_open = mocker.patch('freqtrade.misc.Path.open', MagicMock()) json_dump = mocker.patch('rapidjson.dump', MagicMock())