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

Dart实现URI-1098 Sequence IJ 4时最后三行输出错误如何修复

问题原因

你的问题核心是浮点数精度误差:十进制的0.2无法用二进制浮点数精确表示,每次循环累加0.2的操作会产生微小的精度误差,循环到第11次时,变量i的实际存储值并不是精确的2,因此i==2的判断条件不成立,走了else分支输出了带一位小数的2.0,和预期的整数格式不符。

修复方案

方案1:替换循环变量为整数,避免浮点累加误差

不要直接用浮点数作为循环变量,改用整数计数后再计算浮点值,从根源避免累加误差:

void main() {
  // 总共循环11次:0*0.2 ~ 10*0.2 刚好覆盖0到2的范围
  for (int step = 0; step <= 10; step++) {
    double i = step * 0.2;
    double baseJ = 1 + step * 0.2;
    for (double j = baseJ; j <= baseJ + 2; j++) {
      if (i.abs() < 1e-9 || (i - 1).abs() < 1e-9 || (i - 2).abs() < 1e-9) {
        print('I=${i.toStringAsFixed(0)} J=${j.toStringAsFixed(0)}');
      } else {
        print('I=${i.toStringAsFixed(1)} J=${j.toStringAsFixed(1)}');
      }
    }
  }
}

方案2:修改浮点数判断逻辑,增加精度阈值

如果不想改动循环结构,只需把原来的全等判断改为带精度容差的判断即可,避免微小误差导致判断失效:
把原来的判断条件
if(i==0 || i==1 || i==2)
修改为
if(i.abs() < 1e-9 || (i - 1).abs() < 1e-9 || (i - 2).abs() < 1e-9)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:18:04