So AngularJs is pretty sweet – especially considering the power and elegance of how you can use “filters” to change the way values appear in the UI. There is a built in “number” filter that you can apply to a number value and have it always display a set number of decimal places, i.e. “1” -> “1.0” But, we wanted a filter that did the following…
“1.56” => “1.6”
“1.5” => “1.5”
“1.0” => “1”
“1” => “1”
So I wrote a simple custom filter, setDecmial!
As I love jsFiddle – here’s the live working version: http://jsfiddle.net/lancelarsen/Tx7Ty/
If anyone has suggestions for further improvements, always love to keep making the code better. 🙂
[sourcecode language="javascript"] <div ng-app="myApp"> <div ng-controller="Ctrl"> setDecimal Filter (1): <span>{{val | setDecimal:1}}</span><br> setDecimal Filter (2): <span>{{val | setDecimal:2}}</span><br> </div> </div> var app = angular.module('myApp', []); app.filter('setDecimal', function ($filter) { return function (input, places) { if (isNaN(input)) return input; // If we want 1 decimal place, we want to mult/div by 10 // If we want 2 decimal places, we want to mult/div by 100, etc // So use the following to create that factor var factor = "1" + Array(+(places > 0 && places + 1)).join("0"); return Math.round(input * factor) / factor; }; }); app.controller('Ctrl', function ($scope) { $scope.val = 1.56; }); [/sourcecode]