Reputation: 4180
I want to convert a number to number format.
I've tried this so far: http://plnkr.co/edit/lVJGXyuX0BMvB9QUL5zS?p=preview
function formatMoney(credits) {
console.log(credits+'credits');
var lastThree = credits.substring(credits.length-3);
// var lastThree = credits.slice(-2);
var otherNumbers = credits.substring(0,credits.length-3);
console.log(otherNumbers+'otherNumbers');
if(otherNumbers !== '')
lastThree = ',' + lastThree;
var res = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
return res;
}
function formatNumber(num) {
var n1, n2;
num = (Math.round(num * 100) / 100) + '' || '';
n1 = num.split('.');
n2 = n1[1] || null;
n1 = n1[0].replace(/(\d)(?=(\d\d)+\d$)/g, ",");
num = n2 ? n1 + '.' + n2 : n1;
return num;
}
I want to convert the number to Indian currency.
Example:
1,000
10,000
1,00,000
10,00,000
The output that I am getting with function formatMoney(): 1,0,0,000
The output that I am getting with function formatNumber(): 1,000 and after pressing 0, it changes to NaN0
What am I doing wrong here?
Upvotes: 2
Views: 15023
Reputation: 546
U dont need angular to do this as there is an api in core Javascript Intl.
var number = 2453413.70;
console.log(new Intl.NumberFormat('en-IN', { style: "currency", currency: "INR" }).format(number));
if you dont want currency symbol, use it like this
console.log(new Intl.NumberFormat('en-IN').format(number));
Upvotes: 3
Reputation: 6266
You may inject and use the $filter service directly into your controller or even your view
var myApp = angular.module('myApp', []);
myApp.controller('CalcCtrl', function ($scope, $filter) {
$scope.num = 122212111221121212;
$scope.filtered = $filter('currency')($scope.num);
alert($scope.filtered)
});
Keep in mind that the $filter service is quite easy to extend too.
myApp.filter('customCurrency', function() {
return function(input, symbol, place) {
// Ensure that we are working with a number
if(isNaN(input)) {
return input;
} else {
// Check if optional parameters are passed, if not, use the defaults
var symbol = symbol || 'EUROS';
var place = place === undefined ? true : place;
// Perform the operation to set the symbol in the right location
if( place === true) {
return symbol + input;
} else {
return input + symbol;
}
}
}
});
myApp.controller('CalcCtrl', function ($scope, $filter) {
$scope.num = 122212111221121212;
$scope.filtered = $filter('customCurrency')($scope.num);
});
Upvotes: 0
Reputation: 1116
AngularJS providers filters for doing these kinds of things, there is a currency filter available:
I have rewritten your code with the formatting functions removed and replaced with the currency filter plus the Rupee symbol for Indian currency, hope this solves your problem.
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.change=function($event, money){
$scope.money = qwerty;
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="[email protected]" src="https://code.angularjs.org/1.2.20/angular.js" data-semver="1.2.20"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<input ng-keypress="change($event, money)" type="text" ng-model='money' >
<pre>{{money | currency : "₹" }}</pre>
</body>
</html>
Upvotes: 4