Làm tròn số đến 2 chữ số sau dấu phẩy


81

Tôi không có ý tưởng làm thế nào để làm điều này? Tôi đang thêm số dấu phẩy, kết quả tất nhiên luôn là một số có quá nhiều chữ số sau dấu phẩy. bất kỳ ai?


1
Đối với một số ngôn ngữ, dấu phẩy được thay thế bằng dấu chấm.
DOK

@Matt - đây là một phần của plugin jParseFloat, nó sẽ là một phần của lõi jQuery trong 1.5!
Nick Craver

Câu trả lời:


105

CHỈNH SỬA 2 :

Sử dụng phương thức Numbercủa đối tượng toFixednhư sau:

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roudedString); // toFixed() returns a string (often suitable for printing already)

Nó làm tròn 42,0054321 thành 42,01

Nó làm tròn 0,005 đến 0,01

Nó làm tròn -0.005 thành -0.01 (Vì vậy, giá trị tuyệt đối tăng khi làm tròn ở viền .5)

ví dụ jsFiddle


1
@Sten - dấu phẩy hay số thập phân? câu hỏi và ví dụ của bạn không đồng ý.
Nick Craver

11
Ví dụ này không hoạt động nếu bạn thực sự muốn làm tròn một số, chẳng hạn như 0,007 đến hai chữ số thập phân. Kết quả của việc này là: Math.round (0,007) -> 0,000 và sau đó làFixed (2) -> 0,00. Quá trình làm tròn thực tế sẽ hiển thị 0,01.
Andrei

9
downvote: câu trả lời không chính xác vì Math.round () làm tròn số, do đó loại bỏ tất cả các số thập phân. Tất cả toFixed (2) sau đó làm là thêm hai số 0 ở cuối. Chỉ cần number.toFixed (2) sẽ làm được.
HammerNL

1
Cần phải làm gì đó vì câu trả lời này sai và những người khác có thể không đọc nhận xét trước khi sử dụng câu trả lời được chấp nhận một cách mù quáng.
Pedro Moreira

1
−1: 3.1415trở thành 3.00trong ví dụ của bạn.

103

CẬP NHẬT: Hãy nhớ rằng tại thời điểm câu trả lời được viết lần đầu tiên vào năm 2010, hàm dưới đây toFixed () hoạt động hơi khác một chút. toFixed () bây giờ dường như thực hiện một số làm tròn, nhưng không phải theo cách toán học nghiêm ngặt. Vì vậy, hãy cẩn thận với nó. Làm các bài kiểm tra của bạn ... Phương pháp được mô tả dưới đây sẽ làm tròn số tốt, như nhà toán học mong đợi.

  • toFixed()- phương thức chuyển đổi một số thành một chuỗi, giữ một số thập phân xác định. Nó không thực sự làm tròn số, nó cắt bớt số.
  • Math.round(n)- làm tròn một số đến số nguyên gần nhất. Do đó biến:

0,5 -> 1; 0,05 -> 0

vì vậy nếu bạn muốn làm tròn, hãy nói số 0,55555, chỉ đến chữ số thập phân thứ hai; bạn có thể làm như sau (đây là khái niệm từng bước):

  • 0.55555 * 100 = 55.555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0,56000
  • (0.56000).toFixed(2) -> 0,56

và đây là mã:

(Math.round(number * 100)/100).toFixed(2);

Tôi sử dụng cùng một phương pháp. Hoạt động tuyệt vời
Indiana Kernick

Gây ra sự cố cho các ví dụ khi bạn đã có float với các chữ số mong muốn sau khi hôn mê như> (Math.round (123.12124 * 100) / 100) .toFixed (4); ===> 123.1200
Alendorff

1
Bạn quên thay đổi phép toán làm tròn, như sau: Math.round (123.12124 * 10000) / 10000) .toFixed (4). Đây là nếu bạn muốn làm tròn đến chữ số thập phân thứ 4.
Andrei

Lỗi: toFixed () làm tròn số nên nó không phải là dấu cắt bớt. Xem developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
MikeB

Không vượt qua cho 1,005
Len Joseph

54

Điều này đã làm việc cho tôi:

var new_number = float.toFixed(2);

Thí dụ:

var my_float = 0.6666

my_float.toFixed(3) # => 0.667

Tôi nghĩ rằng vấn đề với điều này là nó không "làm tròn" con số, vì vậy hãy 0.6666.toFixed(3)trở thành 0.666thay vì 0.667. @Andrei dường như có giải pháp phù hợp để làm tròn đúng cách.
Joshua Pinter,

1
Ha! Đừng bận tâm. Tôi chỉ thử nghiệm nó và toFixed()hoạt động hoàn hảo: 0.6666.toFixed(3) # => 0.667. Tôi sẽ thêm nó vào câu trả lời của bạn.
Joshua Pinter

3
Ngắn nhất và tốt nhất. Đây phải là câu trả lời được chấp nhận.

12

Các câu trả lời trước đó đã quên nhập lại đầu ra dưới dạng Số. Có một số cách để làm điều này, tùy thuộc vào sở thích của bạn.

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))

1
Đây là câu trả lời tốt nhất theo tôi. Nó đơn giản, ngắn gọn và kết quả là NUMBER
Kar.ma

Tôi như "+" ký hiệu, rất thanh lịch
Jibeee

4

Điều này không thực sự thân thiện với CPU, nhưng:

Math.round(number*100)/100

hoạt động như mong đợi.


2

Mặc dù chúng tôi có nhiều câu trả lời ở đây với nhiều gợi ý hữu ích, mỗi người trong số họ vẫn bỏ sót một số bước.
Vì vậy, đây là một giải pháp hoàn chỉnh được gói thành chức năng nhỏ:

function roundToTwoDigitsAfterComma(floatNumber) {
    return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}

Chỉ trong trường hợp bạn quan tâm đến cách hoạt động của nó:

  1. Nhiều với 100 rồi làm tròn để giữ độ chính xác của 2 chữ số sau dấu phẩy
  2. Chia lại thành 100 và sử dụng toFixed(2)để giữ lại 2 chữ số sau dấu phẩy và bỏ phần không dùng đến khác
  3. Chuyển đổi nó trở lại float bằng cách sử dụng parseFloat()hàm dưới dạng toFixed(2)chuỗi trả về thay thế

Lưu ý: Nếu bạn giữ 2 chữ số cuối cùng sau dấu phẩy vì làm việc với các giá trị tiền tệ và thực hiện các tính toán tài chính, hãy nhớ rằng đó không phải là ý kiến hay và tốt hơn bạn nên sử dụng các giá trị số nguyên để thay thế.


1

sử dụng mã dưới đây.

alert(+(Math.round(number + "e+2")  + "e-2"));

2
Câu trả lời này về cơ bản tương tự như các câu trả lời khác cho câu hỏi 7 tuổi này, nhưng theo một cách rất khó hiểu, khai thác các chuyển đổi kiểu ngầm của javascript. Những phẩm chất nào của mã này đã thuyết phục bạn đăng nó ở đây?
u354356007

Chất lượng của câu trả lời này là nó khiến tôi học được một cái gì đó tôi mới không biết về JS ;-)
Deblaton Jean-Philippe

0

Tôi sử dụng cái này:

function round(value, precision) {

	if(precision == 0)
		return Math.round(value);  	

	exp = 1;
	for(i=0;i<precision;i++)
		exp *= 10;

	return Math.round(value*exp)/exp;
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.