как убрать 1-e05 и тд из кода пайтон?

import requests
import pandas as pd

# Укажите URL API и заголовки для запросов
url = 'https://api.mainnet-beta.solana.com' # Замените на ваш URL
headers = {'Content-type': 'application/json'} # Заголовки запроса

def get_balance(address, url, headers):
 """Проверяет баланс Solana-адреса.

 Args:
  address (str): Solana-адрес.
  url (str): URL API Solana.
  headers (dict): Заголовки запроса.

 Returns:
  str: Баланс в SOL или сообщение об ошибке.
 """

 payload = {
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getBalance",
  "params": [address, {"commitment": "confirmed"}]
 }

 response = requests.post(url, json=payload, headers=headers)

 if response.status_code == 200:
  data = response.json()
  if 'result' in data:
   balance_lamports = int(data['result']['value']) # Извлекаем значение баланса из объекта 
   balance_sol = balance_lamports / 10**9
   # Форматирование баланса Solana с 5 знаками после запятой
   balance_sol_formatted = "{:.5f}".format(balance_sol) 
   return f"{balance_sol_formatted} SOL" # Возвращаем баланс в формате "X.XXX SOL"
  else:
   return "Error: unexpected response format"
 else:
  return f"HTTP Error {response.status_code}: Could not retrieve balance."

def check_address_type(address):
 """Определяет тип адреса: Solana или Ethereum."""
 if address.startswith("0x"):
  return "ethereum"
 else:
  return "solana"

def check_ethereum_balance(address):
 """Проверяет баланс Ethereum-адреса."""
 url = "https://api.etherscan.io/api"
 api_key = "FSTP8EPICGQE6X373B6R6G8QBS3CD659SN" # Замените на свой API ключ от Etherscan

 params = {
  "module": "account",
  "action": "balance",
  "address": address,
  "tag": "latest",
  "apikey": api_key
 }

 response = requests.get(url, params=params)

 if response.status_code == 200:
  data = response.json()
  if 'result' in data:
   balance_wei = int(data['result'])
   balance_eth = balance_wei / 10**18
   # Форматирование баланса Ethereum с 5 знаками после запятой
   balance_eth_formatted = "{:.5f}".format(balance_eth)
   return f"{balance_eth_formatted} ETH" # Возвращаем баланс в формате "X.XXX ETH"
  else:
   return "Error: unexpected response format"
 else:
  return f"HTTP Error {response.status_code}: Could not retrieve balance."

df = pd.read_csv(r"C:\Users\0\Desktop\crypto\result.csv")
df['balance'] = ""

for index, row in df.iterrows():
 address = row['text']
 address_type = check_address_type(address)

 if address_type == "ethereum":
  balance = check_ethereum_balance(address)
 elif address_type == "solana":
  balance = get_balance(address, url, headers)
 else:
  balance = "Error: Invalid address format"

 df.loc[index, 'balance'] = balance

df.to_csv(r"C:\Users\0\Desktop\crypto\result.csv", index=False)

print("Updated balances have been written to result.csv.")

при маленьких суммах выдает 1-e05(это пример) надо сделать так чтобы выдавались десятичные числа вместо формул


Ответы (1 шт):

Автор решения: Dmitry

Если вы выводите как текстовую информацию, то воспользуйтесь таким видом записи для f-строк.

value = 1/10000
print(f"{value:.18f}")

Вывод будет таким

0.000100000000000000

Здесь дока для полного погружения

Насколько мне известно то в крипто-расчетах по большей части используется 18 значений после запятой, поэтому можно оставить как написано в коде.

Если дальше идти то я бы от функционального подхода отказался и перешел бы к классам, где можно переопределить метод так __repr__() или создал бы его кастомную версию и вызывать этот метод с тем количеством знаков после запятой с которой хотите

→ Ссылка