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

Flutter 计算结果如何自动适配展示为int或double(num类型)

问题解答

num类型认知确认

你的认知是正确的,Dart中num是int和double的抽象父类,完全可以兼容存储两种数值类型。

问题原因定位

当前运算结果始终为int类型的核心原因是你使用了Dart的整除运算符~/,该运算符的返回值固定为int类型,无论运算是否存在小数部分,都会自动截断小数位取整,因此你声明的sum1运行时类型永远是int,转字符串后自然不会展示小数部分。

解决方案

将整除运算符替换为普通除法运算符/,再增加整数判断逻辑,运算结果为整数时转int输出,否则保留double格式输出即可,修改后的代码如下:

onPressed: (){
  setState((){
    try {
      num weightNum = num.parse(weight.text);
      num dis1Num = num.parse(distance1.text);
      num dis2Num = num.parse(distance2.text);
      // 增加除数为0的异常校验
      if (dis2Num == 0) {
        result = "除数不能为0";
        return;
      }
      // 用普通除法运算,返回double类型结果
      num sum1 = weightNum * dis1Num / dis2Num;
      // 判断是否为整数,是则转int输出,否则直接输出
      result = sum1.isInteger ? sum1.toInt().toString() : sum1.toString();
      // 若需要固定保留n位小数,可替换为如下写法,示例保留2位小数:
      // result = sum1.isInteger ? sum1.toInt().toString() : sum1.toStringAsFixed(2);
    } catch (e) {
      // 输入非合法数字的异常处理
      result = "请输入合法数字";
    }
  });
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:10