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
相关产品推荐
相关产品推荐

