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

Dart为num类型编写扩展判断整数/双精度浮点数报错如何解决

问题解答

报错原因

你遇到的类型不匹配报错确实和isDouble getter中传入的this相关,但并非this关键字本身有问题,核心原因是:
double.tryParse方法规定仅接收String类型的入参,用于把字符串解析为双精度浮点数。而你的扩展定义在num类型上,此处的this指代当前调用扩展的num类型实例,把num类型的对象直接传给需要String参数的tryParse方法,自然触发类型不匹配的报错。

修正方案

判断num是否为double类型完全不需要走字符串解析的逻辑,推荐直接通过运行时类型判断实现,性能更高、逻辑更准确:

extension NumberExtension on num {
  bool get isInteger => (this % 1) == 0;
  // 直接判断当前实例的运行时类型是否为double
  bool get isDouble => this is double;
}

如果你的业务场景确实需要通过字符串解析的逻辑校验,也可以先把num实例转为字符串后再传入tryParse:

extension NumberExtension on num {
  bool get isInteger => (this % 1) == 0;
  bool get isDouble => double.tryParse(this.toString()) != null;
}

额外提示

Dart官方命名规范中,扩展类名建议使用大驼峰格式,你原来的numberExtension调整为NumberExtension更符合社区规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:45:03