Hướng dẫn how do you round decimals to the nearest whole number in javascript? - làm thế nào để bạn làm tròn số thập phân thành số nguyên gần nhất trong javascript?

Ví dụ

Đặt x = math.Round [2.5];

Hãy tự mình thử »

Đặt a = math.Round [2.60]; Đặt b = math.Round [2.50]; Đặt c = math.Round [2.49]; Đặt d = math.Round [-2.60]; Đặt e = math.Round [-2,50]; Đặt f = math.Round [-2,49];
let b = Math.round[2.50];
let c = Math.round[2.49];
let d = Math.round[-2.60];
let e = Math.round[-2.50];
let f = Math.round[-2.49];

Hãy tự mình thử »

Đặt a = math.Round [2.60]; Đặt b = math.Round [2.50]; Đặt c = math.Round [2.49]; Đặt d = math.Round [-2.60]; Đặt e = math.Round [-2,50]; Đặt f = math.Round [-2,49];

Định nghĩa và cách sử dụng

Phương thức

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
5 làm tròn một số vào số nguyên gần nhất.

2,49 sẽ được làm tròn xuống [2] và 2,5 sẽ được làm tròn [3].

Cú pháp

Thông sốTham số
Sự mô tảx
A number.

Cần thiết.a số.

Giá trị trả vềTham số
Sự mô tảx

Cần thiết.a số.

Giá trị trả về

Loại hình

Con sốSố được làm tròn đến số nguyên gần nhất.Hỗ trợ trình duyệt
console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
5 là tính năng ECMAScript1 [ES1].
ES1 [JavaScript 1997] được hỗ trợ đầy đủ trong tất cả các trình duyệt:Trình duyệt Chrome
I EI EI EI EI EI E


Hướng dẫn JavaScript này giải thích cách sử dụng hàm toán học gọi là vòng [] với cú pháp và ví dụ.

Sự mô tả

Trong javascript, vòng [] là một hàm được sử dụng để trả lại một số được làm tròn cho giá trị số nguyên gần nhất. Bởi vì hàm vòng [] là một hàm tĩnh của đối tượng toán học, nó phải được gọi qua đối tượng giữ chỗ được gọi là toán học.

Cú pháp

Trong JavaScript, chức năng cú pháp cho vòng [] là:

Math.round[number];

Tham số hoặc đối số

Số lượng sẽ được làm tròn.

Trả lại

Hàm vòng [] trả về một số được làm tròn cho số nguyên gần nhất. Nói cách khác, số được làm tròn đến 0 thập phân.

Nếu số là giá trị âm, hàm vòng [] làm tròn về 0, đó là hành vi khác với hàm tròn trong các ngôn ngữ khác.

Ghi chú

  • Toán học là một đối tượng giữ chỗ chứa các hàm và hằng số toán học của vòng [] là một trong những chức năng này.

Thí dụ

Chúng ta hãy xem một ví dụ về cách sử dụng hàm vòng [] trong javascript.

Ví dụ:

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];

Trong ví dụ này, chúng tôi đã gọi hàm vòng [] bằng lớp toán học.

Chúng tôi đã viết đầu ra của hàm vòng [] vào nhật ký bảng điều khiển trình duyệt web, cho mục đích trình diễn, để hiển thị hàm vòng tròn [] nào trả về.

Sau đây sẽ là đầu ra vào nhật ký bảng điều khiển trình duyệt web:

33
8
-4

Trong ví dụ này, đầu ra đầu tiên cho nhật ký bảng điều khiển được trả về 33, được làm tròn 32,65 đến số nguyên gần nhất.

Đầu ra thứ hai cho nhật ký bảng điều khiển được trả về 8, được làm tròn 8.1 đến số nguyên gần nhất.

Đầu ra thứ ba cho nhật ký bảng điều khiển được trả về -4, được làm tròn đến số nguyên gần nhất. Lưu ý rằng khi xử lý các số âm, hàm vòng [] làm tròn về 0 và trong trường hợp này, đã trả về -4 và không -5. Hành vi này khác với các hàm tròn trong các ngôn ngữ khác.not -5. This behavior is different than the round functions in other languages.

Nói chung, làm tròn thập phân được thực hiện bằng cách mở rộng:

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
7

Thực hiện ngây thơ

Sử dụng hàm sau với số nửa chừng, bạn sẽ nhận được giá trị tròn trên như mong đợi hoặc giá trị tròn dưới đôi khi tùy thuộc vào đầu vào.

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
8 này trong làm tròn có thể giới thiệu khó phát hiện các lỗi trong mã máy khách.

function naiveRound[num, decimalPlaces = 0] {
    var p = Math.pow[10, decimalPlaces];
    return Math.round[num * p] / p;
}

console.log[ naiveRound[1.245, 2] ];  // 1.25 correct [rounded as expected]
console.log[ naiveRound[1.255, 2] ];  // 1.25 incorrect [should be 1.26]

// testing edge cases
console.log[ naiveRound[1.005, 2] ];  // 1    incorrect [should be 1.01]
console.log[ naiveRound[2.175, 2] ];  // 2.17 incorrect [should be 2.18]
console.log[ naiveRound[5.015, 2] ];  // 5.01 incorrect [should be 5.02]

Để xác định xem một thao tác làm tròn có liên quan đến giá trị điểm giữa hay không, hàm tròn nhân lên giá trị ban đầu được làm tròn bởi 10 ** n, trong đó n là số chữ số phân số mong muốn trong giá trị trả về, sau đó xác định xem phần còn lại Phần của giá trị lớn hơn hoặc bằng 0,5. Điều này

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
9 với các giá trị dấu phẩy động là có vấn đề do các vấn đề của định dạng dấu phẩy động với biểu diễn nhị phân và độ chính xác. Điều này có nghĩa là bất kỳ phần phân số nào của một số hơi nhỏ hơn 0,5 [vì mất độ chính xác] sẽ không được làm tròn lên trên.

Trong ví dụ trước,

33
8
-4
0 là giá trị trung điểm nếu nó được làm tròn đến hai vị trí thập phân, giá trị 5.015 * 100 thực sự là
33
8
-4
1. Bởi vì .4999999999994 nhỏ hơn 0,5, nó được làm tròn xuống 501 và cuối cùng là kết quả là 5,01.

Triển khai tốt hơn

Ký hiệu mũ

Bằng cách chuyển đổi số thành một chuỗi trong ký hiệu theo cấp số nhân, các số dương được làm tròn như mong đợi. Nhưng, hãy lưu ý rằng các số âm tròn khác với số dương.

Trên thực tế, nó thực hiện những gì về cơ bản tương đương với "nửa tròn lên" theo quy tắc, bạn sẽ thấy rằng

33
8
-4
2 đánh giá thành
33
8
-4
3 mặc dù
33
8
-4
4 đánh giá thành
33
8
-4
5. Phương pháp lodash _.Round sử dụng kỹ thuật này.

/**
 * Round half up ['round half towards positive infinity']
 * Negative numbers round differently than positive numbers.
 */
function round[num, decimalPlaces = 0] {
    num = Math.round[num + "e" + decimalPlaces];
    return Number[num + "e" + -decimalPlaces];
}

// test rounding of half
console.log[ round[0.5] ];  // 1
console.log[ round[-0.5] ]; // 0

// testing edge cases
console.log[ round[1.005, 2] ];   // 1.01
console.log[ round[2.175, 2] ];   // 2.18
console.log[ round[5.015, 2] ];   // 5.02

console.log[ round[-1.005, 2] ];  // -1
console.log[ round[-2.175, 2] ];  // -2.17
console.log[ round[-5.015, 2] ];  // -5.01

Nếu bạn muốn hành vi thông thường khi làm tròn các số âm, bạn sẽ cần chuyển đổi số âm thành dương trước khi gọi math.Round [], sau đó chuyển đổi chúng trở lại số âm trước khi quay lại.

// Round half away from zero
function round[num, decimalPlaces = 0] {
    if [num < 0]
        return -round[-num, decimalPlaces];

    num = Math.round[num + "e" + decimalPlaces];
    return Number[num + "e" + -decimalPlaces];
}

Làm tròn gần đúng

Để khắc phục vấn đề làm tròn được hiển thị trong ví dụ

33
8
-4
6 trước đó, chúng ta có thể xác định chức năng làm tròn tùy chỉnh thực hiện thử nghiệm "gần như bằng nhau" để xác định xem giá trị phân số có đủ gần với giá trị trung điểm có thể được làm tròn điểm giữa hay không.

// round half away from zero
function round[num, decimalPlaces = 0] {
    if [num < 0]
        return -round[-num, decimalPlaces];
    var p = Math.pow[10, decimalPlaces];
    var n = num * p;
    var f = n - Math.floor[n];
    var e = Number.EPSILON * n;

    // Determine whether this fraction is a midpoint value.
    return [f >= .5 - e] ? Math.ceil[n] / p : Math.floor[n] / p;
}

// test rounding of half
console.log[ round[0.5] ];  // 1
console.log[ round[-0.5] ]; // -1

// testing edge cases
console.log[ round[1.005, 2] ];  // 1.01
console.log[ round[2.175, 2] ];  // 2.18
console.log[ round[5.015, 2] ];  // 5.02

console.log[ round[-1.005, 2] ]; // -1.01
console.log[ round[-2.175, 2] ]; // -2.18
console.log[ round[-5.015, 2] ]; // -5.02

Number.EPSILON

Có một kỹ thuật toán học thuần túy khác nhau để thực hiện vòng tròn đến gần nhất [sử dụng "một nửa vòng so với số không"], trong đó hiệu chỉnh Epsilon được áp dụng trước khi gọi hàm làm tròn.

Đơn giản, chúng tôi thêm giá trị float nhỏ nhất có thể [= 1.0 ULP; đơn vị ở vị trí cuối cùng] vào sản phẩm trước khi làm tròn. Điều này chuyển sang giá trị phao có thể đại diện tiếp theo, cách xa số 0, do đó nó sẽ bù đắp lỗi vòng tròn nhị phân có thể xảy ra trong quá trình nhân bằng

33
8
-4
7.

/**
 * Round half away from zero ['commercial' rounding]
 * Uses correction to offset floating-point inaccuracies.
 * Works symmetrically for positive and negative numbers.
 */
function round[num, decimalPlaces = 0] {
    var p = Math.pow[10, decimalPlaces];
    var n = [num * p] * [1 + Number.EPSILON];
    return Math.round[n] / p;
}

// rounding of half
console.log[ round[0.5] ];  // 1
console.log[ round[-0.5] ]; // -1

// testing edge cases
console.log[ round[1.005, 2] ];  // 1.01
console.log[ round[2.175, 2] ];  // 2.18
console.log[ round[5.015, 2] ];  // 5.02

console.log[ round[-1.005, 2] ]; // -1.01
console.log[ round[-2.175, 2] ]; // -2.18
console.log[ round[-5.015, 2] ]; // -5.02

Sau khi thêm 1 ULP, giá trị 5.015 * 100 là

33
8
-4
1 sẽ được sửa thành
33
8
-4
9, điều này sẽ được làm tròn lên tới 502 và cuối cùng là kết quả là 5,02.

Lưu ý rằng kích thước của một đơn vị ở vị trí cuối cùng ["ULP"] được xác định bởi [1] độ lớn của số và [2] epsilon máy tương đối [2^-52]. ULP tương đối lớn hơn với số lượng có cường độ lớn hơn so với số lượng với số lượng có cường độ nhỏ hơn.

Làm tròn gấp đôi

Ở đây, chúng tôi sử dụng phương thức topRecision [] để loại bỏ các lỗi làm tròn điểm nổi trong các tính toán trung gian. Đơn giản, chúng tôi làm tròn đến 15 con số quan trọng để loại bỏ lỗi làm tròn ở chữ số quan trọng thứ 16. Kỹ thuật này để dự đoán kết quả đến các chữ số quan trọng cũng được sử dụng bởi chức năng tròn Php 7.PHP 7 round function.

Giá trị 5.015 * 100 là

33
8
-4
1 sẽ được làm tròn đầu tiên đến 15 chữ số quan trọng là
function naiveRound[num, decimalPlaces = 0] {
    var p = Math.pow[10, decimalPlaces];
    return Math.round[num * p] / p;
}

console.log[ naiveRound[1.245, 2] ];  // 1.25 correct [rounded as expected]
console.log[ naiveRound[1.255, 2] ];  // 1.25 incorrect [should be 1.26]

// testing edge cases
console.log[ naiveRound[1.005, 2] ];  // 1    incorrect [should be 1.01]
console.log[ naiveRound[2.175, 2] ];  // 2.17 incorrect [should be 2.18]
console.log[ naiveRound[5.015, 2] ];  // 5.01 incorrect [should be 5.02]
1, sau đó nó sẽ làm tròn lại đến 502 và cuối cùng là kết quả là 5,02.

________số 8

Thư viện JavaScript chính xác tùy ý - Decimal.js - decimal.js

// Round half away from zero
function round[num, decimalPlaces = 0] {
    return new Decimal[num].toDecimalPlaces[decimalPlaces].toNumber[];
}

// rounding of half
console.log[ round[0.5] ];  // 1
console.log[ round[-0.5] ]; // -1

// testing edge cases
console.log[ round[1.005, 2] ];  // 1.01
console.log[ round[2.175, 2] ];  // 2.18
console.log[ round[5.015, 2] ];  // 5.02

console.log[ round[-1.005, 2] ]; // -1.01
console.log[ round[-2.175, 2] ]; // -2.18
console.log[ round[-5.015, 2] ]; // -5.02
console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
0

Giải pháp 1: Chuỗi theo ký hiệu theo cấp số nhân

Lấy cảm hứng từ giải pháp được cung cấp bởi Kfish tại đây: //stackoverflow.com/a/55521592/4208440

Một giải pháp giảm đơn giản cung cấp cách làm tròn thập phân, sàn và trần chính xác cho một số lượng số thập phân cụ thể mà không cần thêm toàn bộ thư viện. Nó xử lý phao giống như số thập phân bằng cách khắc phục các vấn đề làm tròn nhị phân để tránh kết quả không mong muốn: ví dụ, sàn [[0,1+0,7]*10] sẽ trả về kết quả dự kiến ​​8.

Các số được làm tròn đến một số chữ số phân số cụ thể. Chỉ định độ chính xác âm sẽ làm tròn đến bất kỳ số lượng địa điểm nào ở bên trái của dấu thập phân.

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
1

Giải pháp 2: Toán học thuần túy [số.epsilon]

Giải pháp này tránh bất kỳ chuyển đổi / thao tác chuỗi nào vì bất kỳ lý do hiệu suất nào.

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
2

Giải pháp 3: Làm tròn đôi

Giải pháp này sử dụng phương thức topRecision [] để loại bỏ các lỗi làm tròn điểm nổi.

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
3

Giải pháp 4: Nhân đôi V2

Giải pháp này giống như Giải pháp 3, tuy nhiên nó sử dụng hàm

function naiveRound[num, decimalPlaces = 0] {
    var p = Math.pow[10, decimalPlaces];
    return Math.round[num * p] / p;
}

console.log[ naiveRound[1.245, 2] ];  // 1.25 correct [rounded as expected]
console.log[ naiveRound[1.255, 2] ];  // 1.25 incorrect [should be 1.26]

// testing edge cases
console.log[ naiveRound[1.005, 2] ];  // 1    incorrect [should be 1.01]
console.log[ naiveRound[2.175, 2] ];  // 2.17 incorrect [should be 2.18]
console.log[ naiveRound[5.015, 2] ];  // 5.01 incorrect [should be 5.02]
2 tùy chỉnh.

console.log[Math.round[32.65]];
console.log[Math.round[8.1]];
console.log[Math.round[-4.2]];
4

Điểm chuẩn

//jsbench.github.io/#31ec3a8b3d22bd840f8e6822e681a3ac

Dưới đây là một điểm chuẩn so sánh các hoạt động mỗi giây trong các giải pháp trên trên Chrome 85.0.4183.83. Rõ ràng tất cả các trình duyệt khác nhau, vì vậy số dặm của bạn có thể khác nhau.

[Lưu ý: nhiều hơn là tốt hơn]

Cảm ơn @Mike vì đã thêm ảnh chụp màn hình của điểm chuẩn.

Làm thế nào để bạn làm tròn số thập phân trong javascript?

Phương thức Math.Round [] làm tròn một số vào số nguyên gần nhất.2,49 sẽ được làm tròn xuống [2] và 2,5 sẽ được làm tròn [3].Math. round[] method rounds a number to the nearest integer. 2.49 will be rounded down [2], and 2.5 will be rounded up [3].

Làm thế nào để bạn làm tròn số 7,25 đến số toàn bộ gần nhất trong JavaScript?

Chức năng vòng [] trong javascript được sử dụng để làm tròn số được truyền làm tham số đến số nguyên gần nhất của nó.Tham số: Số được làm tròn đến số nguyên gần nhất của nó. in JavaScript is used to round the number passed as parameter to its nearest integer. Parameters : The number to be rounded to its nearest integer.

Làm cách nào để làm tròn đến 2 vị trí thập phân trong JavaScript?

Sử dụng phương thức tofixed [] để làm tròn một số đến 2 số thập phân, ví dụ:const result = num.tofixed [2].Phương pháp tofixed sẽ làm tròn và định dạng số đến 2 thập phân., e.g. const result = num. toFixed[2] . The toFixed method will round and format the number to 2 decimal places.

Làm thế nào để bạn làm tròn số thập phân đến một phần trăm gần nhất trong JavaScript?

Để làm tròn một số đến 100 gần nhất, hãy gọi hàm Math.Round [], chuyển số đó chia cho 100 và sau đó nhân kết quả với 100, ví dụ:Môn Toán.Vòng [Num / 100] * 100.call the Math. round[] function, passing it the number divided by 100 and then multiply the result by 100 , e.g. Math. round[num / 100] * 100 .

Bài Viết Liên Quan

Chủ Đề