Home > Software engineering >  How to check if number ends in .99
How to check if number ends in .99

Time:09-08

I'm attempting to do some validation a price field. I would like to check if the price entered into the price field ends in .99

I've attempted find posts about this but I can't find examples for decimal numbers only whole numbers. I tried to check by doing price % 1 but it isnt consistent as the price increases by 10, 20 etc.

Is there a quick way to check if all numbers end in .99?

const price = 9.99

console.log(price % 1)

CodePudding user response:

Floating point math is inherently imprecise. The actual mathematical expression price - 9 will get those extra 0s and a 2 too.

Best you could do is convert to a string with fixed precision (rounding off any extraneous precision; for a price in dollars, you'd only need two digits, but you might go to three or more to verify the price entered didn't end with nonsense fractions of a cent) and perform a string test, e.g.

price.toFixed(2).endsWith('.99')

which doesn't try to perform math on price at all, it just rounds off to two digits after the decimal place to produce a string, then checks if the string ends with .99.

CodePudding user response:

You can perform that validation using the following regular expression:

/\.99$/

First, we try to match an explicit . by escaping it with a backlash. Then, the next two characters must be 99, and then the string end must occur for the successful match. We check that with $. For example,

prices = [0.99, 0.0099, 1.99, 2.99, 3.98, 4.01];
for (const price of prices) {
    if (/\.99$/.test(price.toString())) {
        console.log(`${price} ends with .99`);
    }
}

will print:

0.99 ends with .99
1.99 ends with .99
2.99 ends with .99

CodePudding user response:

You can try regular expression as well. See following code for example:

function testRegex() {
  var re = /^[0-9]*[.](99)$/;
    var val = document.getElementById("inputValue").value;

    if(re.exec(val)) {
      document.getElementById("result").innerText = "Found match!!!";
    } else {
      document.getElementById("result").innerText = "Found no match!!!";
    }

}
<input type="text" id="inputValue" value="" onkeyup="testRegex()" />
<div id="result"></div>

  • Related