飞镖钳功能的逻辑是什么?

时间:2019-07-10 12:34:48

标签: flutter dart

int,double,num等数值类具有钳位功能。我尝试了一下,并得到了一些结果。.我猜它具有类似

的逻辑
a = math.max(-1, math.min(1, a));

但是当我打印此代码时,我得到了奇怪的结果

print(-100.43.clamp(-400.2, 64.2)); // -64.2

dart的钳位函数的算法是什么?

2 个答案:

答案 0 :(得分:0)

飞镖的Clamp功能实际上是使用数字而不是数字的符号

print(-100.43.clamp(-400.2, 64.2)); gives ->  -64.2

因为仅将(-100)设为(100),并且如果这样做=>

100.clamp(-400,64.2) it gives -> 64.2

并且在负数之后最终变为:-64.2 要检查这一点,您可以执行以下操作:

print((-100.43 + 0).clamp(-400.2, 64.2))); // it will give: -100.43

double value = -100;
print(value.clamp(-400.2, 64.2)));

因此您可以使用它来防止这种行为。

答案 1 :(得分:0)

实现是:

double clamp<T extends num>(T number, T low, T high) =>
    max(low * 1.0, min(number * 1.0, high * 1.0));

所以它的作用是根据数字返回一个介于低和高之间的值。 我认为实施是不言自明的。