数字文本的不同精度取决于数值

时间:2017-06-13 13:20:59

标签: javascript knockout.js

我使用knockout来显示数值如下:

<td class="right"><span data-bind="numericTextWithoutNumericSeparator: Volume, precision: 4"></span></td>

在js文件中我有这个:

ko.bindingHandlers.numericTextWithoutNumericSeparator = {
    update: function (element, valueAccessor, allBindingsAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
            precision = ko.utils.unwrapObservable(allBindingsAccessor().precision) || ko.bindingHandlers.numericText.defaultPrecision,
            formattedValue = value.toFixed(precision);

        ko.bindingHandlers.text.update(element, function () { return formattedValue; });
    },
    defaultPrecision: 2
};

但是如果4个十进制数字中的最后2个为零,我需要显示带有2个十进制数字的数字,否则显示带有4个小数的数字。

以下是示例:

1.1234 -> 1.1234
1.1200 -> 1.12
1.1350 -> 1.1350
1.0000 -> 1.00

我应该如何设置我的js文件来实现这一目标?

修改 我编辑了我的js文件:

ko.bindingHandlers.numericTextWithoutNumericSeparator = {
    update: function (element, valueAccessor, allBindingsAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
            precision = function () {
                if (value % Math.round(value, 2) == 0) {
                    return 2;
                } else {
                    return 4;
                }
            },
            formattedValue = value.toFixed(precision);

        ko.bindingHandlers.text.update(element, function () { return formattedValue; });
    }
};

但是要将数字四舍五入到最后的数字。

2 个答案:

答案 0 :(得分:1)

precision是一项功能,但是当您调用它时,您错过了括号

formattedValue = value.toFixed(precision());

答案 1 :(得分:0)

您可以尝试这样的事情:

function shortNumber(number, precision) {
  var short = number.toFixed(precision)
  short = short + new Array(precision - short.split('.')[1].length + 1).join(0)
  return (short == number ? short : number)
}