函数对floor()/ceil()和min()/max()有什么区别?

16

我认为所有编程语言都有这些名称的函数,用于选择两个值中的较小或较大值:

  • min()max()
  • floor()ceil() / ceiling()

一些语言同时具有这两个函数。我相信JavaScript就是一个例子。

我总是有点模糊关于前一对和后一对之间的区别。我有一个模糊的印象,即min/max更简单,floor/ceiling更数学化,但这并不足以说明问题。

奇怪的是,我在StackOverflow或通过搜索Google等互联网上找不到任何讨论这个话题的内容。 那么,在使用这两个函数时,是否有一些最佳实践或经验规则可以帮助我们决定使用哪个函数?

8个回答

18

这就像是苹果和橙子的区别。在大多数语言/API中,min/max需要两个或更多输入,返回最小/最大值。而floor/ceil只需要一个参数,将其向下或向上舍入到最近的整数。


7
哎呀!看起来很明显!但是我还不会删除它,以防还有像我这样的笨蛋也想到同样的事情!\-: - hippietrail

15
据我所知,maxmin用于集合,例如数字数组。而Floorceiling用于单个数字。例如:
min(1, 2, 3, 4) => 1
max(1, 2, 3, 4) => 4
floor(3.5) => 3
ceiling(3.5) => 4

12
min(1, 2) == 1
max(1, 2) == 2

floor(3.9) == 3
round(3.9) == 4

ceil(3.1) == 4
round(3.1) == 3

trunc, as in (int)(3.xxx) = 3 (no matter what xxx is)

关于定义:

floor 是小于 n 的最大整数。

ceil 是大于 n 的最小整数。


8

在Javascript中:

  • Floor:向下取整到最近的整数。
  • Ceil:向上取整到最近的整数。
  • Round:四舍五入到最近的整数。

function ceil() {
    var d = Math.ceil(5.1);

    var x = d + "<br>";
    document.getElementById("ceil").innerHTML = x; 
}

function floor() {
    var d = Math.floor(5.1);

    var x = d + "<br>";
    document.getElementById("floor").innerHTML = x; 
}

function round() {
    var d = Math.round(5.1);

    var x = d + "<br>";
    document.getElementById("round").innerHTML = x; 
}
<!DOCTYPE html>
<html>
<body>

<p>Click the different buttons to understand the concept of Ceil, Floor and Round</p>

<button onclick="ceil()">Ceil 5.1</button>
<p id="ceil"></p>

<button onclick="floor()">Floor 5.1</button>
<p id="floor"></p>

<button onclick="round()">Round 5.1</button>
<p id="round"></p>
</body>
</html>


6

我知道这篇文章已经比较老了,但是有一点需要特别注意。

函数round()向上或向下四舍五入,而函数ceil()和floor()分别向正无穷和负无穷方向舍入;

如果处理正数和负数,则这一点非常重要。例如:

round(4.900000) = 5.000000
ceil(4.900000) = 5.000000
floor(4.900000) = 4.000000

round(4.100000) = 4.000000
ceil(4.100000) = 5.000000
floor(4.100000) = 4.000000

round(-4.100000) = -4.000000
ceil(-4.100000) = -4.000000
floor(-4.100000) = -5.000000

round(-4.900000) = -5.000000
ceil(-4.900000) = -4.000000
floor(-4.900000) = -5.000000

3

不确定我是否理解了您的问题,例如:

a = 1.7
b = 2.8

min(a,b) = 1.7 (returns the minimum of a and b)
max(a,b) = 2.8 (returns the maximum of a and b)

floor(a) = 1 (rounds towards 0)
floor(b) = 2 (rounds towards 0)

ceil(a) = 2 (rounds up)
ceil(b) = 3 (rounds up)

3

min()max()返回两个值中较小或较大的一个,有些函数也可以用于多于两个值的比较,例如

min(3, 5); 返回 3。

floor()ceiling()将一个浮点数截断为整数,例如

floor(5.3); 返回 5。


-1
请考虑以下有关JavaScript中Math.floor()、Math.round()和Math.ceil()的区别:
1- Math.floor(x) /如果x=0.99,则转换为x=0/(返回最接近整数的x向下取整)

2- Math.ceil(x) /如果x<0.1,则转换为x=1/(返回最接近整数的x向上取整)

3-1- Math.round(x) /如果x<0.5,则转换为x=0/
3-2- Math.round(x) /如果0.5≤x<1,则转换为x=1/
(返回最接近整数的x四舍五入)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接