You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:06:03