我面临以下场景的
javascript的Math.floor函数问题:
1)从8192和10484的值,
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
奇怪的是,除了从上面给出的范围外,该功能工作正常.
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/
解决方法
你可以切换到这个:
return parseFloat(_self.userInput()).toFixed(2);
jsFiddle的工作版本:https://jsfiddle.net/jfriend00/5rLL04Lk/
或者,如果你想解决.toFixed()的一些特性,你可以使用这个:
return (Math.round(_self.userInput() * 100) / 100).toFixed(2);
工作jsFiddle:https://jsfiddle.net/jfriend00/xx2aj2L0/
此解决方案通过了所有三个测试用例.