我见过有很多关于小数精度和在Javascript中显示的问题。事情是,我来到了一个解决方案,我认为这对我来说就足够了'Javascript删除小数在淘汰赛中的绑定
关键是我试图解析一个字符串,然后回到数字使用这样的表达式。
return parseFloat(num.toFixed(2));
但也有一些情况下,它不能按预期方式工作。说实话,我不确定它是否与我使用ko或JavaScript代码解析我的方式有关。但是,让我们假设在下面的小提琴中,您在上面的文本框中键入14.385,这两个字段将被正确舍入并显示正确的小数位数,但不删除您添加的数字3333(表示14.393333),上面的那个赢得不要圆整。这只是一个例子,因为有一些奇怪的行为。
哟可以看到这里的小提琴http://jsfiddle.net/RTexF/
感谢
编辑。我添加的代码按judgeja指示(我不明白要问一个代码的原因,当你链接小提琴,我现在看到了吧)
脚本
var decimalValue = 0.25;
function ViewModel() {
var self = this;
self.submittedValue = ko.observable(decimalValue);
self.percentage = ko.computed({
read: function() {
alert('read');
if (isNaN(parseFloat(self.submittedValue())))
return '';
var num = self.submittedValue() * 100;
return parseFloat(num.toFixed(2));
},
write: function(value) {
alert('write');
value = isNaN(value) ? '' : parseFloat((value/100).toFixed(4));
self.submittedValue(value);
},
owner: self
});
}
ko.applyBindings(new ViewModel());
和HTML
<p><input data-bind="value:percentage"></input></p>
<p><input data-bind="value:submittedValue"></input></p>
编辑:
知道这是一个古老的一个,但我想指出,加入这write方法
self.percentage.notifySubscribers(value);
修复该问题(理想情况下,我们可以核对当前值,只是notifiy如果它实际上改变)
小提琴:http://jsfiddle.net/RTexF/1/和http://jsfiddle.net/RTexF/2/
您应该在您的问题中发布jsfiddle代码,因为已知jsfiddle会不时停下来。 – James