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

关于Dart中is类型测试运算符在DartPad中表现异常的问题咨询

为什么Dart中double类型的3.0执行d is int会返回true?

先看你提供的代码:

void main() {
  // as
  // is
  // is!
  
  double d = 3.0;
  bool result = d is int;
  print(result); // prints true!
}

这是Dart类型系统针对数字类型的特殊设计——is运算符对数字的判断逻辑,不仅看对象的运行时类型,还会校验其数值是否符合目标类型的取值要求。

  • 当double变量的值是整数(小数部分为0,比如3.0),Dart判定它可以无损转换为int类型,因此d is int返回true。
  • 若double的值带有非零小数部分(比如3.5),d is int则会返回false。

如果需要严格判断对象的实际运行时类型(而非值的兼容性),可以使用runtimeType属性:

void main() {
  double d = 3.0;
  print(d.runtimeType == int); // 输出 false
  print(d.runtimeType == double); // 输出 true
}

这个设计是为了简化实际开发场景:比如从JSON这类数据源读取的数字通常都是double类型,但其中不少是整数值,用is int可以快速判断该值是否能安全转换为int,省去额外的数值校验步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:35:14