我希望这个标题是有意义的。基本上,我有一个小的应用程序,可以做各种社会保障计算。用户可以输入出生日期、性别、工资等信息,然后单击“计算社会保障”,他们每月的社会保障支出将显示在输入字段中。如果用户愿意,也可以手动输入该号码。问题是,该计算的值在应用程序的其他地方使用,所以为了准确,我认为我需要完整的十进制值。但在美容方面,我只需要它的美元价值(2046年对2046.3339228485938 bla bla bla)。我已经看过几个关于为此编写指令的教程,但这会改变模型中的值。我的脑海中浮现出这样的想法:我可能完全走错了路,但我转向了stackoverflow,希望这是一个常见的问题,但我似乎找不到合适的词来形容谷歌。
谢谢,约翰
发布于 2014-09-19 13:53:21
可以,不需要为此目的自定义过滤器。Angular有自己的过滤器来完成这项工作。试试这个
<div ng-controller="Ctrl">{{dollar | number:2}}</div>发布于 2013-12-08 03:59:00
您可以创建特定的过滤器,如下所示:
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;
}并像这样使用它:
<div ng-controller="Ctrl">{{ dollar | rounded:2 }}</div>示例:http://jsfiddle.net/RdgR2/
发布于 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/
.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;
});
}
};
});https://stackoverflow.com/questions/20445843
复制相似问题