Javascript Math.floor特定数字范围之间的问题

前端之家收集整理的这篇文章主要介绍了Javascript Math.floor特定数字范围之间的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我面临以下场景的 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/

当我用1000改变100它解决错误但我不明白为什么这发生在第一个地方?

解决方法

你可以切换到这个:
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/

解决方案通过了所有三个测试用例.

猜你在找的JavaScript相关文章