Tôi đang phải đối mặt với một vấn đề với Math.floor chức năng javascript cho kịch bản dưới đây:Javascript Math.floor vấn đề giữa phạm vi cụ thể của số
1) từ giá trị betwwen 8192 và 10.484,
if I type 8192.8 -> The Math.floor converts it into 8192.79
if I type 8192.88 -> The Math.floor converts it into 8192.87
if I type 8192.3 -> The Math.floor converts it into 8192.29
Phần lạ là ngoại trừ phạm vi được đưa ra ở trên hàm hoạt động tốt.
HTML:
<div data-bind="text: popIncrease"></div>
<input type="text" data-bind="value: userInput, valueUpdate: 'afterkeydown'" />
Javascript:
var ViewModel = function() {
var _self = this;
_self.userInput = ko.observable();
_self.popIncrease = ko.computed(function() {
return parseFloat((Math.floor(_self.userInput() * 100)/100)).toFixed(2);
});
};
ko.applyBindings(new ViewModel());
jsfiddle: https://jsfiddle.net/91z5bdy4/1/
Khi tôi thay đổi 100 với 1000 nó đã giải quyết được lỗi nhưng tôi không hiểu tại sao điều này xảy ra trên địa điểm đầu tiên?
thể trùng lặp của [Is điểm nổi toán học bị hỏng?] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – suish
Thực tế không có gì để làm với knockout hoặc jquery. Bạn đang thực sự cố gắng làm gì? Nó có vẻ như bạn muốn làm tròn một số đến 2 chữ số thập phân sau đó hiển thị nó với 2 chữ số thập phân. Việc chuyển một số tới * parseFloat * là thừa (nó đã là một số). Một biểu thức không nên được bao bọc trong các dấu ngoặc kép như '((…))', một tập hợp thừa. Tại sao không 'trả về parseFloat (_self.userInput()). ToFixed (2)'? – RobG
8192.8 * 100 === 819279.9999999999, chúc may mắn với điểm số nổi. – floribon