整数垫用零

时间:2015-12-16 05:00:53

标签: javascript angularjs angularjs-directive angularjs-scope angular-filters

我有一个指令转换为2个小数位(输入数字文本框)和 它工作得很好,但我想用零填充整数。

任何人都知道如何使用填充零来实现整数?示例如下。

2 - > 2.00 - 未完成
10.666 - > 10.67 - 完成

app.directive('toPrecision',['$filter', function ($filter) {
    return {
        replace: false,
        restrict: 'A',
        link: function(scope, element, attr) {
            var input = angular.element(element);
            var precisionValue = attr.toPrecision;
            input.on('keyup', function() {
                var parsed = parseFloat(input.val());
                if (!isNaN(parsed)) {
                    if (parseInt(parsed, 10) !== parsed && String(parsed).split('.')[1].length > 2) {
                        var result = parsed.toFixed(precisionValue);
                        input.val(result);
                    }
                }
            });
        }
    }
}]);

HTML

<input type="number" class="form-control" ng-model="rate" to-precision="2" min="0" step="1">

3 个答案:

答案 0 :(得分:1)

结束重写我想要的指令。

app.directive('toPrecision', function() {
return {
    replace: false,
    restrict: 'EA',
    require: 'ngModel',
    link: function(scope, element, attr, ngModelCtrl) {
        var input = angular.element(element);
        var precisionValue = attr.toPrecision;

        ngModelCtrl.$parsers.push(function(value) {
            var clean = value.replace(/[^-0-9\.]/g, '');
            if (value !== clean) {
                ngModelCtrl.$setViewValue(clean);
                ngModelCtrl.$render();
            }
            return clean;
        });

        ngModelCtrl.$formatters.push(function(value) {
            if (angular.isUndefined(value)) {
                return "";
            }
            var parsed = parseFloat(value);
            return parsed.toFixed(precisionValue);
        });

        input.on('blur', function() {
            var parsed = parseFloat(input.val());
            if (!isNaN(parsed)) {
                var result = parsed.toFixed(precisionValue);
                input.val(result);
                ngModelCtrl.$setViewValue(result);
            }
        });

    }
}});

答案 1 :(得分:0)

这里的代码是从我投票结束的答案中取得的:

var s = number.toString();
if (s.indexOf('.') == -1) s += '.';
while (s.length < s.indexOf('.') + 4) s += '0';

答案 2 :(得分:0)

让数学做到,试试这个。

if (!isNaN(parsed)) {
    parsed += Math.pow(10, -1 * (precisionValue + 2)); // 2 + 0.0001
    var result = parsed.toFixed(precisionValue); // 2.00
    input.val(result);
}

请参阅http://getbootstrap.com/css/