Làm tròn 2 chữ số trong javascript
Câu hỏi này rất phức tạp. Giả sử chúng ta có một hàm,
Câu trả lời 'rõ ràng' là ví dụ đầu tiên nên làm tròn đến 0,01 (vì nó gần 0,01 hơn 0,02) trong khi hai ví dụ còn lại làm tròn đến 0,02 (vì 0,0150000000000000001 gần với 0,02 hơn 0,01 và vì 0,015 nằm chính xác giữa chúng và có một quy ước toán học rằng những con số như vậy được làm tròn lên). Điều mà bạn có thể đoán được là 0,01199999999999999944488848768742172978818416595458984375 gần với 0,01 hơn 0,02. Bạn có thể thấy rằng cả ba số đều giống nhau trên bảng điều khiển trình duyệt, trình bao Node hoặc trình thông dịch JavaScript khác. Chỉ cần so sánh chúng:
Vì vậy, khi tôi viết
... Tôi nhận được 0,015, làm tròn đến 0,02 và đáng chú ý không phải là số thập phân 56 mà tôi đã nói trước đó nói rằng tất cả các số này đều chính xác bằng. Vậy ma thuật đen tối này là gì? Câu trả lời có thể được tìm thấy trong đặc tả ECMAScript, trong phần 7.1.12.1: ToString được áp dụng cho loại Số . Ở đây các quy tắc để chuyển đổi một số Số m thành Chuỗi được đặt ra. Phần quan trọng là điểm 5, trong đó một số nguyên s được tạo ra có chữ số sẽ được sử dụng trong chuỗi đại diện của m :
Phần quan trọng ở đây là yêu cầu " k càng nhỏ càng tốt". Yêu cầu đó là bao nhiêu là một yêu cầu, với một Số Tất nhiên, không có cuộc thảo luận nào đã trả lời trực tiếp những gì Không có câu trả lời đúng duy nhất cho điều này. Nó phụ thuộc vào trường hợp sử dụng của bạn. Bạn có thể muốn tôn trọng biểu diễn Chuỗi và làm tròn lên khi:
Mặt khác, bạn có thể muốn tôn trọng giá trị dấu phẩy động nhị phân và làm tròn xuống khi giá trị của bạn từ thang đo liên tục vốn có - ví dụ, nếu đó là cách đọc từ cảm biến. Hai cách tiếp cận này yêu cầu mã khác nhau. Để tôn trọng biểu diễn Chuỗi của Số, chúng tôi có thể (với khá nhiều mã tinh tế hợp lý) thực hiện làm tròn số riêng của chúng tôi hoạt động trực tiếp trên biểu diễn Chuỗi, chữ số theo chữ số, sử dụng cùng thuật toán bạn đã sử dụng ở trường khi bạn được dạy cách làm tròn số. Dưới đây là một ví dụ tôn trọng yêu cầu của OP về việc biểu thị số đến 2 vị trí thập phân "chỉ khi cần thiết" bằng cách tước các số 0 ở sau dấu thập phân; tất nhiên, bạn có thể cần phải điều chỉnh nó theo nhu cầu chính xác của mình.
Ví dụ sử dụng:
Chức năng trên có lẽ là những gì bạn muốn sử dụng để tránh người dùng chứng kiến những con số mà họ đã nhập bị làm tròn sai. (Để thay thế, bạn cũng có thể thử thư viện round10 cung cấp chức năng tương tự với cách triển khai cực kỳ khác biệt.) Nhưng điều gì sẽ xảy ra nếu bạn có loại Số thứ hai - một giá trị được lấy từ thang đo liên tục, trong đó không có lý do gì để nghĩ rằng các biểu diễn thập phân gần đúng với số thập phân ít chính xác hơn các số có nhiều số thập phân hơn? Trong trường hợp đó, chúng tôi không muốn tôn trọng biểu diễn Chuỗi, vì biểu diễn đó (như được giải thích trong thông số kỹ thuật) đã được sắp xếp theo thứ tự; chúng tôi không muốn phạm sai lầm khi nói "0,011999999 ... 375 vòng lên tới 0,015, làm tròn đến 0,02, vì vậy 0,011999999 ... 375 vòng lên 0,02". Ở đây chúng ta chỉ cần sử dụng
61 hữu ích 5 bình luận chia sẻ |