Dart 有没有一种更简洁的方法来执行下面的相同任务?四舍五入至最接近的1或5模6

Dart 有没有一种更简洁的方法来执行下面的相同任务?四舍五入至最接近的1或5模6,dart,rounding,Dart,Rounding,我正在寻找一种方法,将输入减少到最接近的1或5mod6(对于n>=5),并在Dart中找到了上面的代码(项目处于颤振状态)。有人有更好的方法做同样的事情吗 结果(向下舍入的输入)将传递给另一个函数 对于当前n值27,控制台将打印25。。。尝试其他值24映射到23、23映射到自身、22、21、20映射到19、19映射到自身、18映射到17、17映射到自身、16、15、14映射到13……我希望您能明白这一点。我可以通过找到下一个较低的倍数6,然后再加上1或5来消除循环。代码最终变得更短,我认为它比涉

我正在寻找一种方法,将输入减少到最接近的1或5mod6(对于n>=5),并在Dart中找到了上面的代码(项目处于颤振状态)。有人有更好的方法做同样的事情吗

结果(向下舍入的输入)将传递给另一个函数


对于当前n值27,控制台将打印25。。。尝试其他值24映射到23、23映射到自身、22、21、20映射到19、19映射到自身、18映射到17、17映射到自身、16、15、14映射到13……我希望您能明白这一点。

我可以通过找到下一个较低的倍数6,然后再加上1或5来消除循环。代码最终变得更短,我认为它比涉及
%3
%2
的代码更清楚地表达了您的意图

int-lowerMultiple(int-n,int-multipleOf)=>
((n-1)/multipleOf.floor()*multipleOf;
void main(){
var n=27;
var m=低倍数(n,6);
打印((n-m)>=5?(m+5):(m+1));
}

上述代码也适用于小于5的整数,包括非正整数。

谢谢,这正是我想要的!如果
n==m
n+3==m
呢?问题是“减少到最接近的1或5模6”,但这些值与
n-1
/
n+1
n+1
/
n+5
的距离相等。示例表明,它确实应该向下取整到下一个,因此
n
6的倍数应该向下取整到
n-1
。你似乎在把
n==m
四舍五入到
n+1
@lrn:在
lowerMultiple
的定义中有一个狡猾的
n-1
。我认为这意味着当
n
6
的倍数时,这个答案是正确的。(例如,如果
n=24
,那么
m=18
,那么我们就得到了
23
)明白了。这很狡猾(为什么我们需要在现实世界的示例中使用文档!)在Python中,我将把它写成
n-min((n+1)%6,(n+5)%6)
。我不知道dart,但大概是一个简单的翻译?谢谢,这可能对将来的人有用,也可能是我!
var n = 27;

void main() {

  while  (n>=5)

    if ( (n) % 3==0 && (n) % 2==0 ){
      print(n-1);
      break;
    }
    else if ( (n) % 3==0 && (n) % 2!=0 ){
      print(n-2);
      break;
    }
    else if ((n) % 3!=0 && (n) % 2==0){
      print((n/6).floor()*6 +(1));
      break;
    }
    else { n=n+1;}

}