如何在 JavaScript 中对数字进行四舍五入?

发布于 2024-07-08 05:47:23 字数 253 浏览 8 评论 0原文

形式创建一个报告

Name : Value
Name2 : Value2

在做一个项目时,我遇到了一个由前雇员创建的 JS 脚本,它基本上以等的

。问题是这些值有时可以是浮点数(具有不同的精度)、整数,甚至是格式为 2.20011E+17。 我想要输出的是纯整数。 不过,我对 JavaScript 了解不多。 我将如何编写一个方法来获取这些有时浮点数并使它们成为整数?

While working on a project, I came across a JS-script created by a former employee that basically creates a report in the form of

Name : Value
Name2 : Value2

etc.

The peoblem is that the values can sometimes be floats (with different precision), integers, or even in the form 2.20011E+17. What I want to output are pure integers. I don't know a lot of JavaScript, though. How would I go about writing a method that takes these sometimes-floats and makes them integers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

我喜欢麦丽素 2024-07-15 05:47:23

如果需要四舍五入到一定位数,请使用以下函数

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }

If you need to round to a certain number of digits use the following function

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }
旧夏天 2024-07-15 05:47:23

您必须将输入转换为数字,然后将它们舍入:

function toInteger(number){ 
  return Math.round(  // round to nearest integer
    Number(number)    // type cast your input
  ); 
};

或者作为单行:

function toInt(n){ return Math.round(Number(n)); };

使用不同的值进行测试:

toInteger(2.5);           // 3
toInteger(1000);          // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000

You hav to convert your input into a number and then round them:

function toInteger(number){ 
  return Math.round(  // round to nearest integer
    Number(number)    // type cast your input
  ); 
};

Or as a one liner:

function toInt(n){ return Math.round(Number(n)); };

Testing with different values:

toInteger(2.5);           // 3
toInteger(1000);          // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000
〗斷ホ乔殘χμё〖 2024-07-15 05:47:23

根据 ECMAScript 规范,JavaScript 中的数字仅由双精度 64 位格式 IEEE 754。因此 JavaScript 中并不存在真正的整数类型。

关于这些数字的四舍五入,您可以通过多种方法来实现。 Math 对象为我们提供了三种可以使用的舍入方法:

Math.round() 最常用,它返回四舍五入的值到最接近的整数。 然后是 Math.floor() 返回最大的小于或等于数字的整数。 最后,我们有 Math.ceil() 函数,它返回大于或等于数字的最小整数。

还有 toFixed() 返回一个表示使用定点表示法的数字。

Ps.:Math.round() 方法中没有没有第二个参数toFixed()不是 IE 特定的,它的也在 ECMAScript 规范内

According to the ECMAScript specification, numbers in JavaScript are represented only by the double-precision 64-bit format IEEE 754. Hence there is not really an integer type in JavaScript.

Regarding the rounding of these numbers, there are a number of ways you can achieve this. The Math object gives us three rounding methods wich we can use:

The Math.round() is most commonly used, it returns the value rounded to the nearest integer. Then there is the Math.floor() wich returns the largest integer less than or equal to a number. Lastly we have the Math.ceil() function that returns the smallest integer greater than or equal to a number.

There is also the toFixed() that returns a string representing the number using fixed-point notation.

Ps.: There is no 2nd argument in the Math.round() method. The toFixed() is not IE specific, its within the ECMAScript specification aswell

荒岛晴空 2024-07-15 05:47:23

您还可以使用 toFixed(x)toPrecision(x),其中 x 是位数。

所有主流浏览器都支持这两种方法

You can also use toFixed(x) or toPrecision(x) where x is the number of digits.

Both these methods are supported in all major browsers

勿忘心安 2024-07-15 05:47:23

您可以使用 Math.round() 将数字四舍五入到最接近的整数。

Math.round(532.24) => 532

另外,您可以使用 parseInt()parseFloat() 将变量转换为某种类型,在本例中为整数和浮点数。

You can use Math.round() for rounding numbers to the nearest integer.

Math.round(532.24) => 532

Also, you can use parseInt() and parseFloat() to cast a variable to a certain type, in this case integer and floating point.

醉态萌生 2024-07-15 05:47:23

一个非常好的舍入近似:

function Rounding (number, precision){

var newNumber;
var sNumber = number.toString();

var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;

if (number < 0)
  newNumber = (number -  5 * Math.pow(10,-increase));
else
  newNumber = (number +  5 * Math.pow(10,-increase));

var multiple = Math.pow(10,precision);

return Math.round(newNumber * multiple)/multiple;
}

只有在某些情况下,当数字的小数部分的长度很长时,它才会不正确。

A very good approximation for rounding:

function Rounding (number, precision){

var newNumber;
var sNumber = number.toString();

var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;

if (number < 0)
  newNumber = (number -  5 * Math.pow(10,-increase));
else
  newNumber = (number +  5 * Math.pow(10,-increase));

var multiple = Math.pow(10,precision);

return Math.round(newNumber * multiple)/multiple;
}

Only in some cases when the length of the decimal part of the number is very long will it be incorrect.

耳根太软 2024-07-15 05:47:23

您还可以使用 value.toFixed(n) 函数。

它将值四舍五入到下一个带有“n”位小数的值。

You can also use the value.toFixed(n) function.

It will round the value to next value with 'n' decimals.

七色彩虹 2024-07-15 05:47:23

Math.floor(19.5) = 19 也应该有效。

Math.floor(19.5) = 19 should also work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文