che sto affrontando un problema con la funzione Math.floor di javascript per lo scenario di seguito:problema Javascript Math.floor tra specifico intervallo di numeri
1) dal valore betwwen 8192 e 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
Stranamente è che, tranne nell'intervallo sopra indicato, la funzione funziona correttamente.
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/
Quando ho cambiato 100 con 1000 ha risolto l'errore, ma non capisco il motivo per cui questo è accaduto al primo posto?
possibile duplicato di [Is matematica in virgola mobile rotta?] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – suish
In realtà non ha nulla fare con knockout o jquery. Cosa stai cercando di fare? Sembra che tu voglia arrotondare un numero a 2 cifre decimali, quindi visualizzarlo con 2 posizioni decimali. Il passaggio di un numero a * parseFloat * è ridondante (è già un numero). Un'espressione non dovrebbe essere racchiusa tra parentesi quadre come '((...))', un set è ridondante. Perché non 'return parseFloat (_self.userInput()). ToFixed (2)'? – RobG
8192,8 * 100 === 819279,999999999, buona fortuna con aritmetica in virgola mobile. – floribon