как убрать 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__()
или создал бы его кастомную версию и вызывать этот метод с тем количеством знаков после запятой с которой хотите