在 Dart 中四舍五入到 10s
Round up to a 10s in Dart
我正在做分页,我想知道如何将数字(例如 11)四舍五入为 20。
其他情况:
1 should round to 10
501 should round to 510
10 should round to 10
基本上我有卡片,每页有 10 张卡片,所以如果有 11 张卡片,则应该有 2 页。
您所要做的就是:
var test = 11;
print((test / 10).ceil() * 10); // 20
将数字除以 10(在本例中为 11)将得到 1.1。
当你(1.1).ceil()
时,你会得到2。
现在你乘以 10 得到它的 10 次方。
要将数字四舍五入为某个因数的倍数,您可以这样做:
/// Round [number] up to a multiple of [factor].
///
/// The [factor] must be greater than zero.
int roundUp(int number, int factor) {
if (factor < 1) throw RangeError.range(factor, 1, null, "factor");
number += factor - 1;
return number - (number % factor);
}
有一个对应的 roundDown
,您可以根据以下条件定义 roundUp
:
int roundDown(int number, int factor) {
if (factor < 1) throw RangeError.range(factor, 1, null, "factor");
return number - (number % factor);
}
int roundUp(int number, int factor) => roundDown(number + (factor - 1), factor);
这向 plus/minus 无穷大舍入。如果你想从零开始舍入 towards/away,你可以使用:
int roundTowardsZero(int number, int factor) {
if (factor < 1) throw RangeError.range(factor, 1, null, "factor");
return number - number.remainder(factor);
}
int roundAwayFromZero(int number, int factor) =>
roundTowardsZero(number + number.sign * (factor - 1), factor);
因为这种方法只使用整数,所以它相对安全,不会丢失精度,但它可能会在整数范围的最后溢出(或者如果您使用非常非常大的因数)。如果你想避免这种情况,我们需要添加检查 number + factor - 1
是否溢出。在大多数实际用途中,这无关紧要。
var data = 12.62;
print(data.ceil());
会输出
13
我正在做分页,我想知道如何将数字(例如 11)四舍五入为 20。
其他情况:
1 should round to 10
501 should round to 510
10 should round to 10
基本上我有卡片,每页有 10 张卡片,所以如果有 11 张卡片,则应该有 2 页。
您所要做的就是:
var test = 11;
print((test / 10).ceil() * 10); // 20
将数字除以 10(在本例中为 11)将得到 1.1。
当你(1.1).ceil()
时,你会得到2。
现在你乘以 10 得到它的 10 次方。
要将数字四舍五入为某个因数的倍数,您可以这样做:
/// Round [number] up to a multiple of [factor].
///
/// The [factor] must be greater than zero.
int roundUp(int number, int factor) {
if (factor < 1) throw RangeError.range(factor, 1, null, "factor");
number += factor - 1;
return number - (number % factor);
}
有一个对应的 roundDown
,您可以根据以下条件定义 roundUp
:
int roundDown(int number, int factor) {
if (factor < 1) throw RangeError.range(factor, 1, null, "factor");
return number - (number % factor);
}
int roundUp(int number, int factor) => roundDown(number + (factor - 1), factor);
这向 plus/minus 无穷大舍入。如果你想从零开始舍入 towards/away,你可以使用:
int roundTowardsZero(int number, int factor) {
if (factor < 1) throw RangeError.range(factor, 1, null, "factor");
return number - number.remainder(factor);
}
int roundAwayFromZero(int number, int factor) =>
roundTowardsZero(number + number.sign * (factor - 1), factor);
因为这种方法只使用整数,所以它相对安全,不会丢失精度,但它可能会在整数范围的最后溢出(或者如果您使用非常非常大的因数)。如果你想避免这种情况,我们需要添加检查 number + factor - 1
是否溢出。在大多数实际用途中,这无关紧要。
var data = 12.62;
print(data.ceil());
会输出
13