Python开发Telegram加密货币价格机器人 解决CoinMarketCap返回科学计数法问题
问题解决方案
问题根因是Python默认会将数值小于1e-4的浮点数以科学计数法形式输出,你只需要对返回的价格数值做字符串格式化处理即可实现需求,有两种常用修改方案:
方案1:固定保留8位小数(完全匹配你给出的示例需求)
直接修改send_message函数中拼接文本的逻辑,对价格参数做固定小数位格式化即可,修改后的代码如下:
# 全局变量等其他代码保持不变,仅修改send_message函数内的url参数 def send_message(chat_id, msg): # :.8f表示将浮点数保留8位小数输出,自动禁用科学计数法 url = f"https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&text=coin={msg:.8f}$"
这个方案下,你给出的示例数值7.68321846e-06会直接输出为0.00000768,完全符合预期。
方案2:动态去除末尾多余零(适配不同量级加密货币,展示更美观)
如果你的机器人需要同时查询大额和小额加密货币,固定8位小数会导致大额价格后出现多余的零(比如BTC价格会显示成30000.12340000),可以用以下方法做格式化,自动去掉末尾无效的零:
def send_message(chat_id, msg): # 先格式化为8位小数,再去掉末尾的0,最后判断如果剩余末尾是小数点就一并去掉 formatted_price = f"{msg:.8f}".rstrip('0').rstrip('.') if '.' in f"{msg:.8f}" else f"{msg:.8f}" url = f"https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&text=coin={formatted_price}$"
这个方案下:
- 小额价格
7.68321846e-06输出为0.00000768 - 大额价格
30000.1234输出为30000.1234,不会带多余的零 - 整数价格
1输出为1,不会展示为1.00000000
注意事项
- 你的现有代码漏了
import requests导入语句,运行前需要补在代码顶部,否则会触发模块不存在报错 - 如果需要保留更多小数位,只需要把格式化语句里的
.8f改成你需要的位数即可,比如.10f就是保留10位小数
内容的提问来源于stack exchange,提问作者Pie Mark
相关产品推荐
相关产品推荐

