Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从可观测数据中删除更新小数位数_Javascript_Html_Knockout.js - Fatal编程技术网

Javascript 从可观测数据中删除更新小数位数

Javascript 从可观测数据中删除更新小数位数,javascript,html,knockout.js,Javascript,Html,Knockout.js,我有一个可观察的项目,我正试图在该可观察项目上应用用户驱动的格式。我有一个整数输入框,用户可以在其中选择小数点后多少位,0-6。我正试图根据输入框中的选择更新可观测值以应用小数位 我首先尝试了一个计算值,但它不起作用。返回一个错误,“toFixed”不是函数 this.formattedResult = ko.computed(function () { var newValue = self.decimalValue(); var precision = self.decima

我有一个可观察的项目,我正试图在该可观察项目上应用用户驱动的格式。我有一个整数输入框,用户可以在其中选择小数点后多少位,0-6。我正试图根据输入框中的选择更新可观测值以应用小数位

我首先尝试了一个计算值,但它不起作用。返回一个错误,“toFixed”不是函数

this.formattedResult = ko.computed(function () {
    var newValue = self.decimalValue();
    var precision = self.decimalPlaces();
    return newValue.toFixed(precision);
});
然后,我尝试添加一个绑定处理程序,这会导致“toFixed”上出现“uncaught object”

ko.bindingHandlers.numericText = {
update: function (element, valueAccessor, allBindingsAccessor) {
    var value = new String(ko.utils.unwrapObservable(valueAccessor()).toString());
    var precision = ko.utils.unwrapObservable(allBindingsAccessor().precision);
    var formattedValue = value.toFixed(precision);

    ko.bindingHandlers.text.update(element, function () { return formattedValue; });
},
defaultPrecision: 1
};
然后我尝试用numericText扩展numeric,这也会导致“toFixed”上出现“uncaught object”错误

ko.extenders.numeric = function (target, precision) {
if (precision() != null) {
    var precisionValue = target();
    console.log(precisionValue);
    var precisionDecimal = precisionValue.toFixed(2);
    console.log(precisionDecimal);
    var result = ko.dependentObservable({
        read: function () {
            return target().toFixed(precision());
        },
        write: target
    });

    result.raw = target;
    return result;
}
else
    return target;
};
HTML元素上的绑定都进行了更新,以将这些更改考虑在内,但它们不起作用。我还试着简单地将“toFixed”添加到HTML中的数据绑定中,但这也不起作用

我发现了这些类似的问题,但解决方案对我不起作用

这是一个非常令人沮丧的问题,因为我认为在计算函数中添加小数点非常简单。我做错了什么

我不确定这是否重要,但我使用的是淘汰赛3.1

编辑:

我还试着简单地将“toFixed”添加到数据绑定中,但这也会导致一个未捕获的对象

<p data-bind="text: decimalValue().toFixed(2)"></p>


我没有以我预期的方式解决我的问题,但我修改了计算列,将十进制强制为浮点,然后将小数添加到浮点值

最后一个函数如下所示:

this.formattedResult = ko.computed(function () {
    var newValue = parseFloat(self.decimalValue());
    var precision = self.decimalPlaces();
    return newValue.toFixed(precision);
});

我不知道为什么这个有效,但另一个不行?也许当我把这个值赋给newValue时,我只是给它赋了一个可观测值,而这个可观测值不知道如何处理toFixed()?没有解释所有其他问题,但至少我已经解决了。

我建议使用以下JavaScript数字构造函数,如果数字无效,它将返回NaN

this.formattedResult = ko.computed(function () {
// call the number constructor. newValue is now a number or NaN 
//we choose a default value as well.
     var newValue = isNaN(self.decimalValue()) ? 0 :  
Number(self.decimalValue()); 
// call the number constructor again
     var precision = isNaN(self.decimalPlaces()) ? 0 :  Number(self.decimalPlaces()); 
     return newValue.toFixed(precision);
 });

因为
toFixed
Number
对象的函数,所以您在各种尝试中出现的所有错误都来自对
字符串
类型对象:-)调用
toFixed