首页 > 解决方案 > 是否存在 JavaScript 中的 Math.ceil 函数不会从输出中删除小数的情况?

问题描述

是否有一些 Javascript 程序员使用以下语法来删除小数的原因?

Math.ceil(averageCost / 10) * 10;

为什么我们不直接使用 Math.ceil?它不是有效地做与上述相同的事情吗?是否存在 Math.ceil 不起作用的情况?

最初我认为这可能会消除字符串情况并返回零,但在下面的代码中,结果是 NaN -

var name = "Gary";
console.log(Math.ceil(name / 10)); // NaN
console.log(Math.ceil(name)); // NaN

所以我不知道为什么我会看到除以 10 后乘以 10。

标签: javascriptnode.js

解决方案


构造:

Math.ceil(averageCost / 10) * 10;

做一种四舍五入的形式。它具有四舍五入到最接近的 10 整数倍的净效果。所以:

11 => 20
20 => 20
21 => 30
11.99 => 20

Math.ceil(averageCost / 10)除以 10 并四舍五入到最接近的整数(删除所有小数部分和所有小数部分),然后* 10将其带回原来所在的相同数字范围,但没有四舍五入删除的部分。

这是一个显示许多结果的示例:

const nums = [10,11,15,18,19,20,21,10.1,11.99,20.19];

for (let num of nums) {
     let result = Math.ceil(num/10) * 10;
     console.log("Input: ", num, ", Output: ", result);
}


为什么我们不直接使用 Math.ceil?它不是有效地做与上述相同的事情吗?是否存在 Math.ceil 不起作用的情况?

此组合向上舍入到最接近的 10 的整数倍数,而Math.ceil()仅向上舍入到最接近的整数。所以,你问的两种情况有不同的用途。使用完成您想要完成的任务的那个。对于整数部分已经是 10 的幂的数字(例如 10.3),两者将具有相同的输出,但对于任何其他数字(例如 11.3),两者的输出将不同。

Math.ceil(11.3) === 11
(Math.ceil(11.3 / 10) * 10) === 20

是否存在Math.ceil()Javascript 中的函数不会从输出中删除小数的情况?

不,那里没有。它的全部功能是四舍五入到最接近的整数(从而从数字中删除任何小数)。

所以我不知道为什么我会看到除以 10 后乘以 10。

向上舍入到最接近的 10 的整数倍数。


推荐阅读