2016-09-16 20 views
7

Làm thế nào tôi có thể làm tròn một số theo cấp số nhân nhỏ như thế này:vòng theo cấp số nhân số nhỏ với .toFixed()

2.4451778232910804e-26.toFixed(4) => 2.4452e-26

Trong tài liệu, sử dụng .toFixed() đang xảy ra để cho tôi mỗi khi 0. Có chức năng đặc biệt cho exponentially small number không? Tôi không muốn sửa đổi Number.prototype.toFixed().

+0

https://github.com/jtobey/javascript-bignum –

+0

Số trong ví dụ của bạn dường như là một số theo cấp số nhân nhỏ đó không phải thực sự tiêu cực => 0,000 (X26) 000.244.517 ... và như vậy chắc chắn sẽ trở lại như 0 với bất kỳ hình thức làm tròn tôi nghĩ rằng đó là tiêu cực hay tích cực. http://www.2ality.com/2012/03/displaying-numbers.html Tình huống mà điều này gây ra sự cố là gì? – Sam0

Trả lời

4

Như bạn đã viết, toFixed không đủ chính xác vì nó chỉ cho phép "chỉ" tối đa 20 chữ số thập phân. Nhân + Chia sẽ không hoạt động, vì bộ phận có thể cung cấp cho bạn số không còn chính xác nữa. Nhưng toPrecision(<amount-of-precision>) có thể hữu ích.

chỉnh sửa: Nếu bạn muốn 4 chữ số thập phân, bạn cần vượt qua 5 làm thông số (cũng như số trước số điểm).

toPrecision sẽ cung cấp cho bạn Chuỗi, nhưng bạn có thể dễ dàng truyền lại chuỗi đó một lần nữa, nếu cần. ví dụ. Number(someNumberAsString)

var someNumber = 2.4451778232910804e-26; 
 
console.log(someNumber); 
 
console.log(someNumber.toPrecision(8));

+1

* Về mặt kỹ thuật *, 20 là giới hạn mềm: "Số chữ số xuất hiện sau dấu thập phân; đây có thể là giá trị từ 0 đến 20, bao gồm và triển khai có thể hỗ trợ tùy chọn phạm vi giá trị lớn hơn". SpiderMonkey của Mozilla cho phép tối đa '100'. –

+0

Thật vậy, '.toPrecision()' làm cho nó có thể. Đã đấu tranh với '.toFixed()' nhưng dường như nó không đủ. Cảm ơn lời giải thích với ví dụ, đánh giá cao câu trả lời! (bây giờ tôi thấy sự khác biệt giữa 'toPrecision()' và 'toFixed()' x) – nehel

Các vấn đề liên quan