различная точность числового текста в зависимости от числового значения

1

Я использую нокаут для отображения числового значения следующим образом:

<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
};

Но мне нужно показывать числа с 2 десятичными цифрами, если последние 2 из 4 десятичных цифр равны нулю, другие показывают числа с 4 десятичными знаками.

Вот пример:

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

Как я должен chande мой файл js для достижения этого?

EDIT: я редактировал мой файл 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; });
    }
};

Но округлите цифры до 0 цифр.

Теги:
knockout.js

2 ответа

1
Лучший ответ

precision - это функция, но когда вы ее вызываете, вы пропустили круглые скобки

formattedValue = value.toFixed(precision());
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)
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню