You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CoinMarketCap API数字格式化问题:千分位添加无输出

解决CoinMarketCap API中max_supply字段的格式化问题

我来帮你搞定这个问题!你遇到的核心问题是字符串数字的千分位格式化,以及代码静默无输出的排查。咱们一步步来解决:

为什么你的代码没输出?

大概率是这两个原因:

  • 没有正确处理字符串转数字的异常(比如遇到非数字/非∞的奇怪值时,代码直接报错中断)
  • 格式化逻辑有bug,比如手写的千分位函数没考虑小数情况,或者判断条件覆盖不全

可靠的解决方案

咱们用原生的Intl.NumberFormat API来做格式化(比手写正则靠谱多了),同时加上完整的判断和错误处理:

// 先确保你正确获取并解析了API数据
fetch('https://api.coinmarketcap.com/v1/ticker')
  .then(response => {
    // 先检查响应是否成功
    if (!response.ok) throw new Error('请求失败');
    return response.json();
  })
  .then(tickers => {
    tickers.forEach(ticker => {
      let formattedSupply;
      const rawSupply = ticker.max_supply;

      // 处理以太坊这类无最大供应量的情况
      if (rawSupply === '∞') {
        formattedSupply = '∞';
      } else {
        // 把字符串转成数字,同时判断是否为有效数字
        const supplyNum = parseFloat(rawSupply);
        if (!isNaN(supplyNum)) {
          // 格式化:千分位分隔 + 保留1位小数
          formattedSupply = new Intl.NumberFormat('en-US', {
            minimumFractionDigits: 1,
            maximumFractionDigits: 1
          }).format(supplyNum);
        } else {
          // 兜底:如果是异常值,原样返回避免中断
          formattedSupply = rawSupply;
        }
      }

      // 这里替换成你需要的输出方式(比如更新DOM或者打印)
      console.log(`${ticker.name}: ${formattedSupply}`);
    });
  })
  .catch(err => {
    // 一定要加错误捕获,不然请求失败你根本不知道
    console.error('处理过程出错:', err);
  });

关键细节说明

  1. 错误处理:加了响应检查和catch,如果API请求失败或者数据解析出错,你能在控制台看到具体错误,不会静默无输出
  2. 类型安全:用parseFloat转数字后,通过!isNaN判断是否有效,避免非数字字符串导致的逻辑中断
  3. 原生格式化Intl.NumberFormat是浏览器和Node.js都支持的原生API,能完美处理千分位和小数位数,不用自己写容易出错的正则

测试效果

运行这段代码后,比特币的max_supply会输出16,865,112.0,以太坊则保留,其他币种的有效数字也会正确格式化,异常值也不会导致代码挂掉。

内容的提问来源于stack exchange,提问作者hypern00b

火山引擎 最新活动