Dart 有没有一种更简洁的方法来执行下面的相同任务?四舍五入至最接近的1或5模6
我正在寻找一种方法,将输入减少到最接近的1或5mod6(对于n>=5),并在Dart中找到了上面的代码(项目处于颤振状态)。有人有更好的方法做同样的事情吗 结果(向下舍入的输入)将传递给另一个函数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来消除循环。代码最终变得更短,我认为它比涉
对于当前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;}
}