Tôi cần một log
chức năng cho JavaScript, nhưng nó cần phải là cơ sở 10. Tôi không thể thấy bất kỳ danh sách nào cho việc này, vì vậy tôi cho rằng điều đó là không thể. Có bất kỳ pháp sư toán học nào ngoài kia biết một giải pháp cho việc này không?
Tôi cần một log
chức năng cho JavaScript, nhưng nó cần phải là cơ sở 10. Tôi không thể thấy bất kỳ danh sách nào cho việc này, vì vậy tôi cho rằng điều đó là không thể. Có bất kỳ pháp sư toán học nào ngoài kia biết một giải pháp cho việc này không?
Câu trả lời:
"Thay đổi cơ sở" Công thức / Danh tính
Giá trị số cho logarit đến cơ sở 10 có thể được tính với danh tính sau.
Vì Math.log(x)
trong JavaScript trả về logarit tự nhiên của x
(giống như ln (x) ), đối với cơ sở 10, bạn có thể chia cho Math.log(10)
(giống như ln (10) ):
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
là một hằng số được tích hợp sẵn cho Math.log(10)
, vì vậy hàm này về cơ bản giống với:
function log10(val) {
return Math.log(val) / Math.log(10);
}
return Math.log(n) / Math.log(base);
Bạn có thể chỉ cần chia logarit của giá trị của bạn và logarit của cơ sở mong muốn, bạn cũng có thể ghi đè Math.log
phương thức để chấp nhận đối số cơ sở tùy chọn:
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
câu trả lời ở đây sẽ gây ra vấn đề chính xác rõ ràng và không đáng tin cậy trong một số trường hợp sử dụng
> Math.log(10)/Math.LN10
1
> Math.log(100)/Math.LN10
2
> Math.log(1000)/Math.LN10
2.9999999999999996
> Math.log(10000)/Math.LN10
4
(Math.round(Math.log(1000) / Math.LN10 * 1e6) / 1e6)
const logBase = (n, base) => Math.log(n) / Math.log(base);
Math.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
Sau đó bạn có thể làm
Math.log10(your_number);
LƯU Ý: Ban đầu tôi nghĩ phải làm Math.prototype.log10 = ...
điều này, nhưng người dùng CMS chỉ ra rằng Toán học không hoạt động theo cách này, vì vậy tôi đã chỉnh sửa .prototype
phần này.
.prototype
phần đó;)
FF 25+ hỗ trợ một Math.log10
phương thức. Bạn có thể sử dụng polyfill:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN liệt kê các trình duyệt được hỗ trợ .
Trình duyệt máy tính để bàn
Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1
Trình duyệt di động
Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Not supported Not supported 25.0 (25) Not supported Not supported iOS 8
Math.log10(x)
! 😁
Câu trả lời hàng đầu là tốt cho một cơ sở tùy ý, nhưng câu hỏi liên quan đến cơ sở nhật ký 10 và Math.log10(x)
đã được chuẩn trên tất cả các trình duyệt kể từ năm 2015. *
* Ngoại trừ IE, nếu điều đó quan trọng với bạn vì một số lý do.
Nếu bạn có một số x, thì việc sử dụng về Math.log(x)
cơ bản sẽ là lnx.
Để chuyển đổi nó thành một cơ sở khác ngoài e, bạn có thể sử dụng chức năng sau:
function(x){ return Math.log(x)/Math.log(10); }
Đối với cơ sở 10 sử dụng Math.log10()
.
Xem tài liệu tại: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10