TheBlackBenzKid
TheBlackBenzKid

Reputation: 27087

Remove decimal and comma and digits from price in jQuery

I am trying to make sure that any of these combinations - Will always display the rounded digit with no decimals or no commas. Example

1,200.00 should output = 1200
12.33 should output = 12
123.34 should output = 123
1,434 should output = 1434
165,33 should output = 165
250.00 should output = 250
259,00 should output = 259

I have tried:

var currency = "$1,100.00";
var number = Number(currency.replace(/[^0-9\.]+/g,""));

And my latest:

var priceTotal = parseFloat(price.replace( /[^\d\.]*/g, ''));

But this does not work well with comma. It must always be display without comma, dot or the last digits.

Upvotes: 2

Views: 8336

Answers (5)

Kapila Perera
Kapila Perera

Reputation: 857

try to use parseInt method

    var a = '1,200.00';
    var b = '12.33';
    var c = '123.34';
    var d = '1,434';
    var e = '165,33';
    var f = '250.00';
    var g = '259,00';
    console.log(parseInt(a.replace(/\,(\d\d)$/, ".$1").replace(',','')));
    console.log(parseInt(b.replace(/\,(\d\d)$/, ".$1").replace(',','')));
    console.log(parseInt(c.replace(/\,(\d\d)$/, ".$1").replace(',','')));
    console.log(parseInt(d.replace(/\,(\d\d)$/, ".$1").replace(',','')));
    console.log(parseInt(e.replace(/\,(\d\d)$/, ".$1").replace(',','')));
    console.log(parseInt(f.replace(/\,(\d\d)$/, ".$1").replace(',','')));
    console.log(parseInt(g.replace(/\,(\d\d)$/, ".$1").replace(',','')));

Upvotes: 1

Rana Ghosh
Rana Ghosh

Reputation: 4674

Please use /[^0-9\.]/g regex to replace comma, use indexOf for find the position of comma AND use parseInt to make that string into integer.

Please follow the below example::

var a = '1,200.00';
var b = '12.33';
var c = '123.34';
var d = '1,434';
var e = '165,33';
var f = '250.00';
var g = '259,00';
$(document).ready(function () {
    parseNumberCustom(a);
    parseNumberCustom(b);
    parseNumberCustom(c);
    parseNumberCustom(d);
    parseNumberCustom(e);
    parseNumberCustom(f);
    parseNumberCustom(g);
});
function parseNumberCustom(number_string) {
    var new_number = parseInt(number_string.indexOf(',') >= 3 ? number_string.split(',')[0] : number_string.replace(/[^0-9\.]/g, ''));
    console.log('Before==>' + number_string + ', After==>' + new_number);
}

Upvotes: 5

Pranav C Balan
Pranav C Balan

Reputation: 115232

Use Math.round method to round a number or use Math.floor method in case you need the lower value.

var number = Math.round( 
   currency
     // convert the comma seperated decimal part to dot seperated
     .replace(/\D(\d{2})$/, '.$1') 
     // replace all non-digit dot characters
     .replace(/[^\d.]+/g, '')
);

['1,200.00', '12,33', '123.34', '1,434', '$1,100.16'].forEach(function(currency) {
  var number = Math.round(currency.replace(/\D(\d{2})$/, '.$1').replace(/[^\d.]+/g, ""));
  console.log(currency + ' => ' + number)
})

FYI : There is no need to escape . within the character class.

Upvotes: 1

sachin
sachin

Reputation: 406

Check this

<html>
<head>
<meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  
  
</head>
<script>
$(document).ready(function(){


   

$("#Convert").click(function(){


 var currency1 = $("#mode").val()

if (currency1.indexOf(",") >= 0 && currency1.indexOf(".") >= 0)	
{
var intvalue =(parseInt(currency1.replace(/[^0-9\.]/g, '')));
alert(intvalue)
}
if (currency1.indexOf(".") >= 0 && currency1.indexOf(",") < 0)
{
var intvalue = Math.floor( currency1 );
alert(intvalue)
}
if (currency1.indexOf(",") >= 0 && currency1.indexOf(".") < 0)	
{
var streetaddress= currency1.substr(0, currency1.indexOf(',')); 
alert(streetaddress)

}
})  

});

</script>
<body>

<div class="table-responsive container">
Enter Value:
<input type=Text id="mode" text="Switch Mode" class="Form-control" value="" >
<input type=Button id="Convert" text="Switch Mode" class="btn btn-primary" value="Convert" >


  </div>
  </body>
  </html>

Upvotes: 2

Gorka Hernandez
Gorka Hernandez

Reputation: 3958

If the input always has two decimals (when there there's any) this should work:

function toNumber(string) {
    string = string.replace(/[^\d\,\.]/g, '');
    let commaNotation = /^\d+(\.\d{3})?\,\d{2}$/.test(string);
    let result = commaNotation ?
        Math.round(parseFloat(string.replace(/[^\d\,]/g, '').replace(/,/, '.'))) :
        Math.round(parseFloat(string.replace(/[^\d\.]/g, '')));
    return result;
};

You can opt to use Math.floor() instead of Math.round() if you don't want to round up when >= 0.50.

Upvotes: 1

Related Questions