Reputation: 40
I have a question about decimal numbers. I need to convert my numbers to decimal but I couldn't get what I exactly want.
What I want is:
First of all I searched in here and found some solutions to change my numbers :
function number_format(string,decimals=2,decimal=',',thousands='.',pre='R$ ',pos=' Reais'){
var numbers = string.toString().match(/\d+/g).join([]);
numbers = numbers.padStart(decimals+1, "0");
var splitNumbers = numbers.split("").reverse();
var mask = '';
splitNumbers.forEach(function(d,i){
if (i == decimals) { mask = decimal + mask; }
if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; }
mask = d + mask;
});
return pre + mask + pos;
}
var element = document.getElementById("format");
var money= number_format("130000",2,',','.');
element.innerHTML = money;
This code above gave me 20.911,56 but it didn't give me 130,000. Instead it is 1,300,00.What should I do? Can't I have them on the same time?
Upvotes: 2
Views: 1694
Reputation: 404
function numberFormat(number, decimals = 0) {
let decimalNumbers = '';
if (number.toString().includes('.')) {
decimalNumbers = number.toString().substr(number.toString().indexOf('.') + 1, decimals);
if (decimalNumbers.length < decimals) {
for (let i = decimalNumbers.length; i < decimals; i++) {
decimalNumbers += '0';
}
}
} else {
decimalNumbers = '0';
for (let i = 2; i <= decimals; i++) {
decimalNumbers += '0';
}
}
number = parseInt(number);
number = number.toString().split('').reverse().join('');
let n = '';
const stringLength = number.length;
for (let i = 0; i < stringLength; i++) {
if (i === 2 || (i > 2 && i % 2 === 0)) {
n = n + number[i] + ',';
} else {
n = n + number[i];
}
}
number = n.split('').reverse().join('');
if (decimals !== 0) {
number = number + '.' + decimalNumbers;
}
if (number[0] === ',') {
number = number.substr(1);
}
if (number[1] === ',' && number[0] === '-') {
number = number.substr(0, 1) + number.substr(2);
}
return number;
}
* numberFormat(5000000, 2) // Output: 50,00,000.00
* numberFormat(5000000) // Output: 50,00,000
* numberFormat(-15264.61, 2) // Output: -15,264.61
* numberFormat(2106.02) // Output: 2,106
* numberFormat(2.02) // Output: 2
* numberFormat(21.02) // Output: 21
* numberFormat(210.02) // Output: 210
* numberFormat(2106.02) // Output: 2,106
* numberFormat(21060.02) // Output: 21,060
* numberFormat(210600.02) // Output: 2,10,600
* numberFormat(2106000.02) // Output: 21,06,000
* numberFormat(21060000.02) // Output: 2,10,6,0,000
* numberFormat(210600000.02) // Output: 21,06,00,000
* numberFormat(-210600000.0222, 2) // Output: -21,06,00,000.02
Upvotes: 0
Reputation: 97120
Just use Intl.NumberFormat
as follows:
const formatter = new Intl.NumberFormat('en');
console.log(formatter.format(130000)); // 130,000
console.log(formatter.format(20911.56)); // 20,911.56
Upvotes: 3