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

Dart中访问Map键对应值报错:Iterable<double>不支持*运算符

Dart CurrencyExchange类兑换金额计算错误修复

问题代码

你编写的CurrencyExchange类及出错的exchange方法代码如下:

class CurrencyExchange {
  Map<String, double> exchangeRates = {
    'USD': 1.0,
    'EUR': 0.85,
    'JPY': 110.15,
    'GBP': 0.72,
    'AUD': 1.39,
    'CAD': 1.25,
    'CHF': 0.92,
    'CNY': 6.47,
    'HKD': 7.77,
    'NZD': 1.41,
  };

  exchange(double amount, String target) {
    if (exchangeRates.keys.contains(target.toUpperCase())) {
      // 错误代码:
      var newAmount = amount * (exchangeRates.values * 1.0);  
    }
  }
}

触发错误提示:The operator '*' isn't defined for the type 'Iterable<double>'

错误原因

exchangeRates.values返回的是Map中所有值的Iterable集合,不是单个汇率值,直接对整个集合做乘法操作不符合Dart的运算规则,因此报错。

正确实现

通过传入的target键(转成大写后)从Map中获取对应的单个汇率值,再与金额相乘即可。修改后的完整代码如下:

class CurrencyExchange {
  Map<String, double> exchangeRates = {
    'USD': 1.0,
    'EUR': 0.85,
    'JPY': 110.15,
    'GBP': 0.72,
    'AUD': 1.39,
    'CAD': 1.25,
    'CHF': 0.92,
    'CNY': 6.47,
    'HKD': 7.77,
    'NZD': 1.41,
  };

  // 指定返回类型,代码更规范
  double? exchange(double amount, String target) {
    final targetCurrency = target.toUpperCase();
    // 直接用containsKey判断键是否存在,效率更高
    if (exchangeRates.containsKey(targetCurrency)) {
      // 获取对应汇率值,已判断存在,用!断言非null
      final rate = exchangeRates[targetCurrency]!;
      // 计算兑换后的金额
      return amount * rate;
    }
    // 目标货币不存在时返回null,也可根据需求抛出异常
    return null;
  }
}

关键细节

  1. 统一将target转成大写,确保与Map中的键格式匹配
  2. 用exchangeRates.containsKey()替代keys.contains(),减少一次集合遍历,性能更优
  3. 直接通过键获取单个汇率值,避免操作整个值集合
  4. 给方法指定返回类型double?,明确返回值的可能状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:23:20