首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对输入中的数字进行舍入,但在模型中保留完整的十进制值

对输入中的数字进行舍入,但在模型中保留完整的十进制值
EN

Stack Overflow用户
提问于 2013-12-08 03:52:18
回答 4查看 18.7K关注 0票数 5

我希望这个标题是有意义的。基本上,我有一个小的应用程序,可以做各种社会保障计算。用户可以输入出生日期、性别、工资等信息,然后单击“计算社会保障”,他们每月的社会保障支出将显示在输入字段中。如果用户愿意,也可以手动输入该号码。问题是,该计算的值在应用程序的其他地方使用,所以为了准确,我认为我需要完整的十进制值。但在美容方面,我只需要它的美元价值(2046年对2046.3339228485938 bla bla bla)。我已经看过几个关于为此编写指令的教程,但这会改变模型中的值。我的脑海中浮现出这样的想法:我可能完全走错了路,但我转向了stackoverflow,希望这是一个常见的问题,但我似乎找不到合适的词来形容谷歌。

谢谢,约翰

EN

回答 4

Stack Overflow用户

发布于 2014-09-19 13:53:21

可以,不需要为此目的自定义过滤器。Angular有自己的过滤器来完成这项工作。试试这个

代码语言:javascript
运行
复制
<div ng-controller="Ctrl">{{dollar | number:2}}</div>
票数 9
EN

Stack Overflow用户

发布于 2013-12-08 03:59:00

您可以创建特定的过滤器,如下所示:

代码语言:javascript
运行
复制
var app = angular.module("MyApp",[]);

app.filter("rounded",function(){    
    return function(val,to){
        return val.toFixed(to || 0);
    }
});

function Ctrl($scope){
    $scope.dollar=2046.3339228485938;
}

并像这样使用它:

代码语言:javascript
运行
复制
<div ng-controller="Ctrl">{{ dollar | rounded:2 }}</div>

示例:http://jsfiddle.net/RdgR2/

票数 4
EN

Stack Overflow用户

发布于 2015-03-14 03:21:06

其他答案在这一点上并不完全正确,因为OP希望它出现在输入字段上,但四舍五入仅显示。

使用解析器和格式化程序是一种可行的方法。我找到了这个代码片段(https://www.snip2code.com/Snippet/43223/angular-directive-to-format-a-number-in-)并对其进行了修改。

Working fiddle在这里:http://jsfiddle.net/2akaxojg/

代码语言:javascript
运行
复制
.directive('inputCurrency', function ($filter, $locale) {
    return {
        terminal: true,
        restrict: 'A',        
        require: '?ngModel',
        link: function (scope, element, attrs, ngModel) {

            if (!ngModel)
                return; // do nothing if no ng-model

            // get the number format
            var formats = $locale.NUMBER_FORMATS;

            // fix up the incoming number to make sure it will parse into a number correctly
            var fixNumber = function (number) {
                if (number) {
                    if (typeof number !== 'number') {
                        number = number.replace(',', '');
                        number = parseFloat(number);
                    }
                }
                return number;
            }

            // function to do the rounding
            var roundMe = function (number) {
                number = fixNumber(number);
                if (number) {
                    return $filter('number')(number, 2);
                }
            }

            // Listen for change events to enable binding
            element.bind('blur', function () {                                
                element.val(roundMe(ngModel.$modelValue));
            });          

            // push a formatter so the model knows how to render
            ngModel.$formatters.push(function (value) {
                if (value) {
                    return roundMe(value);
                }
            });

            // push a parser to remove any special rendering and make sure the inputted number is rounded
            ngModel.$parsers.push(function (value) {
                return value;
            });
        }
    };
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20445843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档